preg_match_all('/[\s]{1}(AA|BB|CC)+[\s]{1}/',' AA BB ',$matches);
结果是AA
,但我需要AA
和BB
。
最佳答案
[\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
。不需要方括号或大括号。
关于PHP:preg_match 正则表达式找不到正确的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3743055/