Php 正则表达式或';有界吗?

Php 正则表达式或';有界吗?,php,regex,Php,Regex,我有两个preg_match_all()正在运行,我想将它们合并为一个。每个查找函数A或函数B的一个匹配项。我知道用“this | that”来匹配这个或那个,但当涉及到匹配“%this()”或“%that()”时,我不确定是否最好匹配“%this()|%that()”,或者是否有办法将“|”两边包含的内容绑定为写一些类似“%this | that()”的简短内容,我相信它们会匹配“%this”和“that()”,但不是“this()”或“this()”“that()”。我知道有其他方法可以解决

我有两个preg_match_all()正在运行,我想将它们合并为一个。每个查找函数A或函数B的一个匹配项。我知道用“this | that”来匹配这个或那个,但当涉及到匹配“%this()”或“%that()”时,我不确定是否最好匹配“%this()|%that()”,或者是否有办法将“|”两边包含的内容绑定为写一些类似“%this | that()”的简短内容,我相信它们会匹配“%this”和“that()”,但不是“this()”或“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);

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

%(this|that)\(\)
如果不想创建新的捕获组,也可以使用非捕获组,该组仅用于优先级,没有副作用:

%(?:this|that)\(\)

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

%(this|that)\(\)
如果不想创建新的捕获组,也可以使用非捕获组,该组仅用于优先级,没有副作用:

%(?:this|that)\(\)

好吧,这太简单了。我认为它不起作用,因为括号通常包含主题匹配。在这种情况下,括号的解释是不同的,还是它会创建主题匹配?乔伊,这很有效,非常感谢你,但我想知道你是否知道一种不为“这个”或“那个”创建主题匹配的方法“.你是说非捕获组?那太简单了。我认为它不起作用,因为括号通常包含主题匹配。在这种情况下,括号的解释是不同的,还是会产生主题匹配?Joey,这很有效,非常感谢你,但我想知道你是否知道一种不为“这个”或“那个”创建主题匹配的方法。你是说非捕获组?