输入字符串为:
约翰的三明治好不好
表情:
J.+(\'s|\') sandwich.* are (good|bad)
PHP代码:
preg_match_all("/ Expression /Us", Input string , $matches);
尽管它将匹配输入字符串中的's 和 good ,但我也想通过重复表达式的某些部分来匹配 bad ,即(good|bad)
。
我该怎么做?
答案 0 :(得分:1)
您可以使用正则表达式:
.*?(\bgood\b|\bbad\b)\s?((?1))?
.*?
懒惰地匹配任何东西。 (\bgood\b|\bbad\b)
捕获组。捕获任一:
单词边界\b
,后跟good
,然后是单词边界\b
|
或。
\b
,后跟bad
,后跟单词边界\b
。\s?
可选地匹配空白。((?1))?
递归第一个模式并选择在第二个捕获组中捕获。您可以实时测试此正则表达式here。
good
和bad
分别在捕获组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]);
}