Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式匹配_Php_Regex_Preg Match All - Fatal编程技术网

PHP正则表达式匹配

PHP正则表达式匹配,php,regex,preg-match-all,Php,Regex,Preg Match All,给定输入字符串“othertext?.abc.de.fgh.i moretext”和模式'/\?(\.[a-zA-Z]*)*/'我试图使用函数preg\u match\u all获得与元素.abc、.de、.fgh和.i匹配的数组,但只匹配了.abc.de.fgh.i和.i。()您可以使用\G锚 (?:\?|\G(?!^))\K\.[a-zA-Z]+ 部分: (?:非捕获组 \?匹配? |或 \G(?!^)在上一个匹配的末尾而不是开始处断言位置 )关闭组 \K\.[a-zA-Z]+忘记当

给定输入字符串“othertext?.abc.de.fgh.i moretext”和模式'/\?(\.[a-zA-Z]*)*/'我试图使用函数
preg\u match\u all
获得与元素.abc、.de、.fgh和.i匹配的数组,但只匹配了.abc.de.fgh.i和.i。()

您可以使用
\G

(?:\?|\G(?!^))\K\.[a-zA-Z]+
部分:

  • (?:
    非捕获组
    • \?
      匹配
    • |
    • \G(?!^)
      在上一个匹配的末尾而不是开始处断言位置
  • 关闭组
  • \K\.[a-zA-Z]+
    忘记当前匹配的内容,然后匹配
    和1+字符a-zA-Z
|

输出

array(4) {
  [0]=>
  string(4) ".abc"
  [1]=>
  string(3) ".de"
  [2]=>
  string(4) ".fgh"
  [3]=>
  string(2) ".i"
}

为什么需要
(?!^)
?@Oleg这是因为
\G
在两个位置匹配。在字符串的开头或上一个匹配的位置。有关更多信息,请参阅本页
array(4) {
  [0]=>
  string(4) ".abc"
  [1]=>
  string(3) ".de"
  [2]=>
  string(4) ".fgh"
  [3]=>
  string(2) ".i"
}