标题可能会混淆,但是我想获得的内容:
我有字符串:
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
,并以第一个括号]
结束,并且在此括号之前的任何地方都有任何地方。
所以在上面的示例中,我想匹配:
14:00:02 | some text <some text> XXCODE error
sometext
]
我已经尝试了REGEX:/14:00(?=.*?error).*?XXCODE.*?n]/gs
但没有成功,因为它也匹配了第一次事件而没有"错误"。如何仅在我的匹配中与LookAhead匹配?有可能吗?
您可以使用以下模式:
^14:00b[^]]*XXCODE[^]]*error[^]]*]
为了在每个 line的开始时匹配 请确保多行旗将传递给正则编译器(除非您在诸如Notepad (例如sed
(或基于行的工具(例如CC_6或(等文本编辑器中使用它ruby ^
已经与行的开始匹配(。
请参阅Regex Demo
详细信息
-
^
-线的启动(与多行修修饰符一起使用( -
14:00b
-14:00
值为一个整个单词 -
[^]]*
-0]
以外的其他字符 -
XXCODE
-字面的XXCODE
substring -
[^]]*
-0]
以外的其他字符 -
error
-字面的error
substring -
[^]]*
-0]
以外的其他字符 -
]
- a]
char。
如果最后一个关闭的]
必须位于单独的行上,则可以使用
^14:00b[^]]*XXCODE[^]]*error.*r?n(?:(?!]$).*r?n)*]$
请参阅此正则演示
在这里,.*r?n(?:(?!]$).*r?n)*]$
零件很有趣:
-
.*r?n
-匹配第一行的其余部分 -
(?:(?!]$).*r?n)*
-匹配:0 序列:-
(?!]$)
-新行开始之后,线路末端不能有]
-
.*r?n
-线的其余部分
-
-
]$
-匹配行末端的]
。
如果error
可能发生在XXCODE
之前,请使用交替:
^14:00b[^]]*(?:XXCODE[^]]*error|error[^]]*XXCODE)[^]]*]
请参阅另一个正则演示
,因为error
可能发生在XXCODE
之前,您需要查看但不消耗:
^14:00(?=[^]]*error)[^]]*XXCODE[^]]*]
正则分解:
^14:00 # Match lines beginning with 14:00
(?= # Construct a positive lookahead
[^]]*error # That looks for `error` wherever possible before `]`
) # End of lookahead
[^]]*XXCODE[^]]*] # Match rest up to a `]` should include `XXCODE`
实时演示