php - 从字符串的末尾开始,一旦到达字符组的第一次出现,如何停止捕获?
问题描述
我试图捕获从字符串末尾开始的所有字符,但直到我找到abc
. 我目前的正则表达式是:
/(?<=abc)(.+?)$/
这似乎可行,但如果我有两次或多次出现,abc
它将捕获除最后一次之外的所有内容。以这个字符串为例:
foo bar abc abc foo bar
将捕获foo bar abc( abc foo bar)
.
为什么会发生这种情况,我怎样才能让捕获在第一次出现时停止abc
?所以:
foo bar abc abc( foo bar)
正则表达式101
解决方案
您可以使用
(?<=abc)((?!abc).)+?$
要求每个重复的字符不是“abc”中的“a”。(重复此操作直到字符串末尾确保匹配中不包含“abc”)
https://regex101.com/r/BoK0Mh/3
为什么会发生这种情况
因为正则表达式从字符串的开头开始并向右工作,直到找到匹配项 - 即使它以lookbehind开头,它们也不会从末尾开始并向左工作。
推荐阅读
- android - android 应用程序未显示在双应用程序或克隆应用程序中
- c# - 将 PDF 下载为文件或流而不是文本
- java - 如何制作一个基础测试类来测试不同存储库的常用方法(如 CRUD)?
- wso2 - 如何在 WSO2 APIM 中对自定义响应使用 in sequence 和 out 序列?
- javascript - React JS 中的三元运算符
- multithreading - 在分叉和分叉子进程时等待 std::condition_variable 无法恢复它
- java - 与 Selenium 测试集成后,Jenkins Build 失败
- android - 为什么我无法解析符号“CONTENT_PROVIDER_AUTHORITY”?
- javascript - Material-UI 防止 Accordion 在 AccordionDetails 单击时默认折叠
- browser - 在浏览器 Spyder IDE 中