首页 > 解决方案 > 从字符串的末尾开始,一旦到达字符组的第一次出现,如何停止捕获?

问题描述

我试图捕获从字符串末尾开始的所有字符,但直到我找到abc. 我目前的正则表达式是:

/(?<=abc)(.+?)$/

这似乎可行,但如果我有两次或多次出现,abc它将捕获除最后一次之外的所有内容。以这个字符串为例:

foo bar abc abc foo bar将捕获foo bar abc( abc foo bar).

为什么会发生这种情况,我怎样才能让捕获在第一次出现时停止abc?所以:

foo bar abc abc( foo bar) 正则表达式101

标签: phpregex

解决方案


您可以使用

(?<=abc)((?!abc).)+?$

要求每个重复的字符不是“abc”中的“a”。(重复此操作直到字符串末尾确保匹配中不包含“abc”)

https://regex101.com/r/BoK0Mh/3

为什么会发生这种情况

因为正则表达式从字符串的开头开始并向右工作,直到找到匹配项 - 即使它以lookbehind开头,它们也不会从末尾开始并向左工作。


推荐阅读