php 我如何在正则表达式中捕获短语[duplicate]

bpsygsoo  于 2023-01-29  发布在  PHP
关注(0)|答案(2)|浏览(79)
    • 此问题在此处已有答案**:

How can I make part of regex optional?(2个答案)
2天前关闭。
我使用这个正则表达式have (?=(an|the) agreement)来查找"have an/the agreement",但是我还想捕获"have agreement"。我该如何实现呢?

f0brbegy

f0brbegy1#

您可以将正则表达式的中间部分设置为 optional

\bhave(?: (?:an|the))? agreement\b


∮ ∮ ∮ ∮

brccelvz

brccelvz2#

您的正则表达式既不匹配“have an agreement”也不匹配“have the agreement”,而只匹配“have“(如果后面跟有“an”或“the”)。
一个满足你所有需求的正则表达式是

have (?:(?:an|the) )?agreement

其中有两个非捕获组(以(?:开头):

  • 内部组X1 M1 N1 X匹配“an”或“the”,
  • 外部的(?:(?:an|the) )与内部组加上其后的空格匹配

外部的非捕获组本身是完全可选的,由它后面的?标记,所以你也可以只使用“have agreement”--两个词之间只有一个空格。

相关问题