PHP正则表达式匹配
给定输入字符串“othertext?.abc.de.fgh.i moretext”和模式'/\?(\.[a-zA-Z]*)*/'我试图使用函数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]+忘记当
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"
}