我想在以下字符串中匹配“句子两个foo ”和句子四个foo “:
句子一句foo句两句foo句三句foo句四句f五句
请注意,每个句子可以包含多个空格,但从不连续空格 通过至少 2个连续的空格
将每个句子与前一个和后一个句子分开我使用以下模式进行匹配:
.*(sentence two.* ).*(sentence four.* )
请注意两句话后的双倍空格
如你所知,问题是由于匹配引擎的贪婪,它将匹配句子四末尾的双倍空格。所以我的第一场比赛group(1)
将比我想要的更多,我的第二场比赛group(2)
将为空。我需要的是group(1)
中的“句子twofoo”和group(2)
中的“句子4 foo”
我已阅读有关非贪婪运营商的帖子“?”但我在将它应用于双重空间时遇到了问题(顺便说一下,它不一定是双重的,也可能是三个,四个等)。
我试过了:
.*(sentence two.*)( )?.*(sentence four.*)( )?
并采用group(1)
和group(3)
,但似乎没有任何区别......
非常感谢任何帮助。
感谢
/安德烈
答案 0 :(得分:1)
非贪婪的算子应该应用于抓取句子的部分,而不是双重空格:
/(sentence two.*?) .*(sentence four.*?)/
(因为你想在遇到双倍空格之前匹配尽可能短的文本量)