如何重复正则表达式的某些部分

时间:2018-07-21 21:22:54

标签: php regex

输入字符串为:

约翰的三明治好不好

表情:

J.+(\'s|\') sandwich.* are (good|bad)

PHP代码:

preg_match_all("/ Expression /Us", Input string , $matches);

尽管它将匹配输入字符串中的's good ,但我也想通过重复表达式的某些部分来匹配 bad ,即(good|bad)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式:

.*?(\bgood\b|\bbad\b)\s?((?1))?

  • .*?懒惰地匹配任何东西。
  • (\bgood\b|\bbad\b)捕获组。捕获任一:

    • 单词边界\b,后跟good,然后是单词边界\b

    • |或。

    • \b,后跟bad,后跟单词边界\b
  • \s?可选地匹配空白。
  • ((?1))?递归第一个模式并选择在第二个捕获组中捕获。

您可以实时测试此正则表达式here

goodbad分别在捕获组1和2中捕获。


Php片段:

<?php
$str = "John's sandwiches are good bad";
$re = "/.*?(\bgood\b|\bbad\b)\s?((?1))?/";
if (preg_match_all($re, $str, $matches)) {
    print_r($matches[1]);
    print_r($matches[2]);
}