PHP:preg_match正则表达式找不到正确的字符串

时间:2010-09-18 19:03:15

标签: php regex

preg_match_all('/[\s]{1}(AA|BB|CC)+[\s]{1}/',' AA BB ',$matches);

结果为AA,但我需要AABB

3 个答案:

答案 0 :(得分:2)

用于匹配匹配项之间空格重叠的[\s]{1}序列*。 "AA "之后的尾随空格与" BB"之前的空格相同。任何一个字符只能匹配一次,因此在扫描找到" AA "后,它只搜索剩余的"BB "字符串以查找匹配项,并且找不到匹配项。

请尝试使用单词边界转义序列\b。这匹配单词的开头和结尾但实际上并不消耗任何字符,因此可以多次匹配:

preg_match_all('/\b(AA|BB|CC)+\b/', 'AA BB', $matches);

使用\b具有不需要你的字符串周围多余空格的额外效果。如果您愿意,可以传递'AA BB'而不是' AA BB '

*顺便说一下,[\s]{1}[\s]相同,与简单\s相同。无需方括号或大括号。

答案 1 :(得分:0)

问题是你试图将相同的空间匹配两次。使用前瞻(?= \ s)应该有所帮助:

preg_match_all('/\s(AA|BB|CC)(?=\s)/',' AA BB CC BB AA ',$matches);

答案 2 :(得分:0)

你可以做一个积极的观察:

/(?<=\s)(AA|BB|CC)+\s/


资源: