RegEx预测.*

Umb*_*lla 5 regex pcre

我有一个模式需要找到string1 的最后一次出现,除非在主题的任何地方找到string2,然后它需要第一次出现string1.为了解决这个问题,我写了这个效率低下的负面预测.

/(.(?!.*?string2))*string1/
Run Code Online (Sandbox Code Playgroud)

运行需要几秒钟(对于没有出现任何一个字符串的主题,过长时间过长).有没有更有效的方法来实现这一目标?

And*_*ark 3

您应该能够使用以下内容:

/string1(?!.*?string2)/
Run Code Online (Sandbox Code Playgroud)

string1只要string2在字符串后面找不到,就会匹配,我认为这满足您的要求。

编辑:看到您的更新后,请尝试以下操作:

/.*?string1(?=.*?string2)|.*string1/
Run Code Online (Sandbox Code Playgroud)