0

我现在有两个 preg_match_all() 正在运行,我想将它们合并为一个。每个都找到函数 A 或函数 B 的出现。我知道使用 "this|that" 来匹配这个或那个,但是在匹配 "%this()" 或 "%that()" 时,我不确定是否最好匹配 "%this()| %that()" 或者是否有办法绑定 '|' 两边包含的内容 写一些简短的东西,比如“%this|that()”,我相信它会匹配“%this”和“that()”,但不能匹配“this()”或“that()”。我知道解决我的特定问题的其他方法,但我(希望其他发现此问题的人)很想知道如何正确使用“|” 无需重复整个字符串。这里'

$regex = '/%myFunc\(([0-9]+)\)/u';
$one = preg_match_all($regex, $text, $matches);
$regex2 = '/%otherFunc\(([0-9]+)\)/u';
$two = preg_match_all($regex2, $text, $matches2);

目标更短,例如:

$regex = '/%myFunc|otherFunc\(([0-9]+)\)/u';
preg_match_all($regex, $text, $matches);
4

1 回答 1

3

好吧,您可以使用括号对表达式进行分组并控制优先级:

%(this|that)\(\)

如果您不想创建新的捕获组,您也可以为此使用非捕获组,这仅用于优先级并且没有副作用:

%(?:this|that)\(\)
于 2013-03-05T22:03:57.663 回答