正则表达式之前或之后

时间:2014-04-18 21:14:34

标签: php regex

我会使用正则表达式来匹配字符串tofind

我有两种可能性第一次

before tofind

第二个是

tofind after 

如何将两个示例中的单词tofind与一个正则表达式匹配?

我用过

before (tofind) | (tofind) after 

它在比赛1和比赛2上给了他们

我的结果总是在数组匹配1

我正在使用php:

if (preg_match("/before (tofind) | (tofind) after/", $content, $result))
        return trim($result[1]);

谢谢

2 个答案:

答案 0 :(得分:9)

您可以使用branch reset功能:

(?|before (tofind)|(tofind) after)

现在两个捕获组的编号相同。

注意:您可以对命名捕获执行相同操作(并且无需重复捕获组的名称):

(?|before (?<mycap>tofind)|(tofind) after)

或使用允许重复名称的(?J)修饰符(必须放在命名组之前的开头,它不能作为你可以放在结束分隔符之后的全局修饰符):

(?J)(?:before (?<mycap>tofind)|(?<mycap>tofind) after)

答案 1 :(得分:5)

要为Casimir的可爱答案添加另一个选项,这里的解决方案适用于没有(?|语法的正则表达式。它依赖于简单的交替与后视和前瞻。由于目标是在组1中具有令牌,因此交替包含在捕获括号中。

((?<=before )tofind|tofind(?= after))