标题可能会引起混淆,但我想实现的目标是:
我有字符串:
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 ++),基于行的工具(如sed
Ruby)中使用了它,而该工具^
已经与行的开头匹配。
细节
^
-一行的开始(与多行修饰符一起使用时)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] 删除。
我来说两句