0

假设我有以下字符串:“blablaoneblablablaone”,我想匹配“one...one”中的“bla”匹配项,这意味着前两个“bla”不会被捕获,因为它们位于“one”之前”。

使用正则表达式两次很容易完成(一次匹配“一...一”和一个匹配“bla”之间的所有内容),但我的问题是是否可以使用单个正则表达式来完成。

谢谢

4

2 回答 2

0

您可以使用环视。

(?<=one)(bla)*(?=one)

正向后视 ( (?<=...)) 检查前面的字符是否与某些模式匹配。

正向预读 ( (?=...)) 检查下一个字符是否与某个模式匹配。

环视不包括在匹配的字符串中。

测试

或者您可以简单地将要提取的部分放在括号中并提取第 1 组。(?:即使 (bla) 成为非捕获组,它不会改变匹配,只会改变捕获的内容)。

one((?:bla)*)one

测试

于 2013-06-20T14:59:42.430 回答
0

您可以使用以下正则表达式:/(?:one)([bla]+)(?:one)/g. 可以在这里测试:http ://www.gethifi.com/tools/regex

于 2013-06-20T14:59:52.993 回答