从左侧开始使用正则表达式(即两边最窄的匹配)

Wis*_*guy 5 php regex lookahead

假设我正在尝试与/dog.*lab/此文本匹配:

"我有一只狗.我的狗是一个黑人实验室.他是在实验室里创造的."

贪婪地,它会匹配" 狗.我的狗是一个黑色的实验室.他是在实验室里创造的 ".

我想找到两边最窄的比赛.如果我使用ungreedy修饰符,
/dog.*?lab/或者/dog.*lab/U它会匹配较少但仍然太多:
"狗.我的狗是黑色实验室"

有没有办法从左边开始搜索我的搜索,因此只匹配" 狗是黑实验室 "?

非常感谢.抱歉这个人为的例子.

Gum*_*mbo 10

您可以使用前瞻断言来排除dog介于dog和之间的情况lab:

/dog(?:(?!dog).)*?lab/
Run Code Online (Sandbox Code Playgroud)