我试图获得点后的值,我想得到所有这些(每个都是他们自己的键/值)。
以下是我正在运行的内容:
$string = "div.cat.dog#mouse";
preg_match_all("/\.(.+?)(\.|#|$)/", $string, $matches);
当我进行$matches
的转储时,我得到了这个:
Array
(
[0] => Array
(
[0] => .cat.
)
[1] => Array
(
[0] => cat
)
[2] => Array
(
[0] => .
)
)
项目[1]
是,它只返回1个值。我期待的是它返回(对于这种情况)2项cat
和dog
。 dog
preg_match_all
未被接听?
答案 0 :(得分:5)
使用前瞻:
\.(.+?)(?=\.|#|$)
你的正则表达式中的问题是你匹配LHS上的DOT和匹配RHS的DOT或HASH或输入结束。匹配后,内部指针向前移动,不会为下一个字匹配DOT。
(?=\.|#|$)
是一个积极的先行者,不会匹配这些字符,但只是向前看,所以指针保留在cat
而不是cat.
之后的DOT。