我有以下正则表达式:
\w{6,}(?=(\s|\n)*hello there)
我正在尝试匹配所有模式,直到到达字符串“ 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”
如何修改上面的正则表达式以获取正确的结果?
答案 0 :(得分:2)
这可能是您想要的当前模式的版本:
\w{6,}(?=[\s\S]*\bhello there\b)
这里的问题是您想跨行匹配。也许.*
本身不会使用您当前的工具执行该操作。
如果您的正则表达式风格恰好支持DOT ALL模式,则可以使用以下模式:
\w{6,}(?=.*\bhello there\b)
这是第二个.*
版本的演示,该版本使用DOT ALL模式,显示您预期的六个匹配项。
答案 1 :(得分:2)
如果要捕获hello there
之前的所有6个字符的字符串,则正确的正则表达式为:
\w{6,}(?=[\s\S]*hello there)
[\s\S]
表示任何字符是否为空格(实际上,如果要使用single line mode,则等同于(?s).*
的所有字符)。
有关演示,请参见here。
P.S。如果您想将hello there
用作全行定界符,请将其替换为(?m)^hello there$
答案 2 :(得分:2)