正则表达式-如何使文本与模式前瞻匹配

罗布森

标题可能会引起混淆,但我想实现的目标是:

我有字符串:

14:00:01 | some text XXCODE <some text> 
some text 
] 
14:00:02 | some text <some text> XXCODE error 
sometext
]
14:00:03 | some text XXCODE <some text> 
some text
and more text 412432 
]

我想匹配以以下开头的文本,该文本14:00具有字符串XXCODE,并以第一个方括号结尾,并且]在此方括号文本之前有任意地方error

因此,在上面的示例中,我想进行匹配:

14:00:02 | some text <some text> XXCODE error 
sometext
]

我已经尝试过正则表达式: /14\:00(?=.*?error).*?XXCODE.*?\n]/gs

但没有成功,因为它也与没有“错误”的第一次出现相匹配。如何仅在我的匹配中将以上内容与lookahead相匹配?可能吗?

维克多·史翠比维

您可以使用以下模式:

^14:00\b[^]]*XXCODE[^]]*error[^]]*]

为了匹配每的开头,请确保将多行标志传递给regex编译器(除非您在文本编辑器(如Notepad ++),基于行的工具(如sedRuby)中使用了它,而该工具^已经与行的开头匹配。

正则表达式演示

细节

  • ^ -一行的开始(与多行修饰符一起使用时)
  • 14:00\b-14:00整体价值
  • [^]]* -除0以外的其他字符 ]
  • XXCODE-文字XXCODE子串
  • [^]]* -除0以外的其他字符 ]
  • error-文字error子串
  • [^]]* -除0以外的其他字符 ]
  • ]-一个]字符

如果最后一个结帐]必须位于单独的行中,则可以使用

^14:00\b[^]]*XXCODE[^]]*error.*\r?\n(?:(?!]$).*\r?\n)*]$

观看此正则表达式演示

在这里,该.*\r?\n(?:(?!]$).*\r?\n)*]$部分很有趣:

  • .*\r?\n -匹配第一行的其余部分
  • (?:(?!]$).*\r?\n)* -匹配0+序列:
    • (?!]$)-]在新行开头之后不能在行末
    • .*\r?\n -其余部分
  • ]$-]在行尾匹配

如果error可能早于XXCODE,请交替使用:

^14:00\b[^]]*(?:XXCODE[^]]*error|error[^]]*XXCODE)[^]]*]

查看另一个正则表达式演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章