我会使用正则表达式来匹配字符串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]);
谢谢
答案 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))