preg_match_all('/[\s]{1}(AA|BB|CC)+[\s]{1}/',' AA BB ',$matches);
结果为AA
,但我需要AA
和BB
。
答案 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)