我有以下正则表达式:
\w{6,}(?=(\s|\n)*hello there)
我试图匹配所有模式,直到达到字符串“你好那里”。
ASD abc1234
fegds abc12345
xyz456 GD (jdkjf)
xyz1234 GD (jdkjf)
(jsdfk) def123 kjfg abc493
hello there
kjfg feg4493
它似乎只匹配“abc493”,而它应该真正匹配所有6种模式:“abc1234”,“abc12345”,“xyz456”,“xyz1234”,“def123”和“abc493”
如何修改上述正则表达式以获得正确的结果?
这可能是您想要的当前模式的版本:
\w{6,}(?=[\s\S]*\bhello there\b)
这里的问题是你想要跨行匹配。也许.*
本身不会用你当前的工具那样做。
如果您的正则表达式风格恰好支持DOT ALL模式,那么您可以使用以下模式:
\w{6,}(?=.*\bhello there\b)
这是第二个.*
版本的演示,它使用DOT ALL模式,显示您的六个预期匹配出现。
如果你想捕获hello there
之前的所有6个字符的字符串,正确的正则表达式是:
\w{6,}(?=[\s\S]*hello there)
其中[\s\S]
是指任何空间或非空间(几乎所有的东西,相当于(?s).*
,如果你想使用single line mode)。
有关演示,请参阅here。
附:如果你想让hello there
成为一个全行分隔符,用(?m)^hello there$
替换它