REGEX-如何将文本与图案周围的lookahead匹配



标题可能会混淆,但是我想获得的内容:

我有字符串:

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`

实时演示

最新更新