当前位置: 首页 > 知识库问答 >
问题:

Java:匹配Regex,除非以任意后缀结尾

柯昆
2023-03-14

举例说明:

 "legitString" RETURNS "legitString"

 "legitString blabla" RETURNS "legitString"

 "legitString PoisonousSuffix" RETURNS "legitString"

 "legitStringPoisonousSuffix" RETURNS no match

我需要按照特定的模式从文件中解析尽可能多的引用。但是文件的某些行被截断,并且不总是相同的长度(!)。

幸运的是,当这种情况发生时,该行以“>>”结束。我必须假设引用被截断,我必须丢弃它。因此,在我的情况下,“>>$”将是有毒的后缀。另一方面,如果“>>”位于文本中间,我应该像通常那样安全地提取引用。(引用以数字结尾,但每次的数字数可能不同,所以我不能使用它。)

所以在我的例子中:

"REF" RETURNS "REF"

"REF >>" RETURNS "REF"

"REF>>" RETURNS nothing

"REF>> bla " RETURNS "REF" // because in my case, the poison is only poisonous if in the end

我已经看到:https://stackoverflow.com/tags/regex/info,但我尝试了语法

myRegex(?!>>$)

而且看起来不对。当行以“>>”结束时,它会截断引用的最后一个合法数字,这是最糟糕的情况:一个损坏的引用正在通过。

我已经看到:Regex用于不以给定后缀结尾的字符串,但是:

myRegex(?:(?!>>).).$

拒绝合法引用。

   \b(SWN-)?WZ-SB\d{2}(-\d{2}){2}-[A-Z]?\d* 
"SWN-WZ-SB00-49-03-C11>> bla"

"SWN-WZ-SB00-49-03-C11 >>  "

"SWN-WZ-SB00-49-03-C11 >>"

"SWN-WZ-SB00-49-03-C11 >> bla"
"SWN-WZ-SB00-49-03-C11>>"

谢谢

共有1个答案

仉宸
2023-03-14

正确的方法是使用条件句。下面是我使用的模式。

(?(?![\w-]+>>$)(?:([^\s>]*)(?:.*))([^\w\w]))

我将为你提供一个细目:

(?...)如果有条件

(?![\w-]+>>$)检查字符串是否包含有毒后缀

([^\n>]*)(?:.*))捕获所有内容,直到您运行到空格或

([^\w\w])不捕获任何内容。

所以if条件的语法是(?if(condition)thenelse)。此模式的作用是,如果字符串不包含后缀,则返回字符串直到第一个空格,但如果包含,则不匹配任何内容。

演示

 类似资料:
  • 问题内容: 我有一个正则表达式,用于匹配表格的表达式 这个正则表达式看起来像: 正如您在本演示中看到的那样,这实际上很好,并且与我想要的匹配 但是:D(黄油来了) 我想通过使其更易读和“紧凑”来优化正则表达式本身。我搜索了如何执行此操作,然后找到了一种称为反向引用的名称,您可以在其中命名捕获组,然后像下面这样引用它们: 我在其中命名了捕获表达式左侧的组,后来我将其引用为,现在的 问题 是,仅在表达

  • 或者更好的方法是遍历它,为参数的每个索引获取TRUE或FALSE标志 我只知道如何使用matcher.find()进行循环,如果有任何帮助,我将不胜感激

  • 我试图创建一个正则表达式模式来匹配每个(内容*),但是该模式可以在另一个((内容)(内容))中找到。我尝试了,但这返回了外部的。 例如:字符串应返回: 第一个匹配: 第二个匹配: 编辑: 我试过:但在?R(未知标志)附近出现错误

  • 我需要一个正则表达式(将在ZF2路由中使用,我相信它使用php的preg_match),匹配除特定字符串之外的任何内容。 比如:我需要搭配除了“红”、“绿”、“蓝”之外的任何东西。 我目前有正则表达式: 在最后一种情况下,正则表达式的行为不像我希望的那样。它应该与“redtest”匹配,因为“redtest”不是(“红色”、“绿色”或“蓝色”)。 有关于如何修复正则表达式的想法吗?

  • 给定一个字符串 在一次过程中匹配和提取字符串的3个部分的最佳Java正则表达式是什么? 第一个逗号之前的前缀 左括号内的剩余部分 括号内的后缀 对于上面的示例,3个组(在引号内)将是 “不带逗号的前缀” “带可选后缀的余数” “(可选后缀)” 字符串的所有3个部分都是可变长度的。余数部分本身可以包含逗号和括号,可选后缀可以以空格开始,也可以不以空格开始,然后是左括号,后面是零个或多个字符,后面是右

  • 但是,当我尝试使用的输入运行此代码时,我得到了的意外结果 我做错了什么?