PHP正则表达式匹配

Mar*_*ela 2 php regex preg-match-all

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

The*_*ird 5

你可以利用\G锚点

(?:\?|\G(?!^))\K\.[a-zA-Z]+
Run Code Online (Sandbox Code Playgroud)

在部分:

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

正则表达式演示| php 演示

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

preg_match_all($re, $str, $matches);
var_dump($matches[0]);
Run Code Online (Sandbox Code Playgroud)

输出

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