preg_match_all 只匹配一个
preg_match_all is only matching one
我正在尝试获取点后的值,我想获取所有的值(每个都作为它们自己的 key/value)。
下面是我运行:
$string = "div.cat.dog#mouse";
preg_match_all("/\.(.+?)(\.|#|$)/", $string, $matches);
当我转储 $matches
时,我得到了这个:
Array
(
[0] => Array
(
[0] => .cat.
)
[1] => Array
(
[0] => cat
)
[2] => Array
(
[0] => .
)
)
项目 [1]
所在的位置只有 returning 1 个值。我所期待的是 return(对于这种情况)2 项 cat
和 dog
。为什么 dog
没有被 preg_match_all
选中?
使用前瞻:
\.(.+?)(?=\.|#|$)
RegEx Demo
您的正则表达式中的问题是您正在匹配 LHS 上的 DOT 和匹配的 RHS 上的 DOT 或 HASH 或输入结尾。匹配后,内部指针向前移动,不留下要匹配下一个单词的 DOT。
(?=\.|#|$)
是一个积极的前瞻,它不匹配这些字符,但只是向前看,因此指针保留在 cat
而不是 cat.
之后的 DOT。
我正在尝试获取点后的值,我想获取所有的值(每个都作为它们自己的 key/value)。
下面是我运行:
$string = "div.cat.dog#mouse";
preg_match_all("/\.(.+?)(\.|#|$)/", $string, $matches);
当我转储 $matches
时,我得到了这个:
Array
(
[0] => Array
(
[0] => .cat.
)
[1] => Array
(
[0] => cat
)
[2] => Array
(
[0] => .
)
)
项目 [1]
所在的位置只有 returning 1 个值。我所期待的是 return(对于这种情况)2 项 cat
和 dog
。为什么 dog
没有被 preg_match_all
选中?
使用前瞻:
\.(.+?)(?=\.|#|$)
RegEx Demo
您的正则表达式中的问题是您正在匹配 LHS 上的 DOT 和匹配的 RHS 上的 DOT 或 HASH 或输入结尾。匹配后,内部指针向前移动,不留下要匹配下一个单词的 DOT。
(?=\.|#|$)
是一个积极的前瞻,它不匹配这些字符,但只是向前看,因此指针保留在 cat
而不是 cat.
之后的 DOT。