PHP 正则表达式匹配

PHP regular expression matching

给定输入字符串“othertext ?.abc.de.fgh.i moretext”和模式 '/\?(\.[a-zA- Z]*)*/' 我正在尝试使用函数 preg_match_all 来获取与元素 .abc, [=15= .de、.fgh.i 但只有 ?.abc.de.fgh.i.i 匹配。 (The test)

您可以使用 \G 锚点

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

部分:

  • (?:非捕获组
    • \? 匹配 ?
    • |
    • \G(?!^) 在上一场比赛结束时声明位置,而不是在开始时
  • ) 关闭群组
  • \K\.[a-zA-Z]+ 忘记当前匹配的内容,匹配 . 和 1+ 个字符 a-zA-Z

Regex demo | Php demo

$re = '/(?:\?|\G(?!^))\K\.[a-zA-Z]+/';
$str = 'othertext ?.abc.de.fgh.i moretext';

preg_match_all($re, $str, $matches);
var_dump($matches[0]);

输出

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