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

标签 php regex

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

结果是AA,但我需要AABB

最佳答案

[\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/

相关文章:

php - 以 HTML 形式处理时间

php - 在 MySQL 表中设置唯一的列对

java - 正则表达式模式从字符串中查找单词

java - 正则表达式java如何将2个值相加?

php - SQL:根据另一个单元格的值选择单元格的值

php mysql 如果存在更新否则插入

php - 防止动态 SQL 中的 SQL 注入(inject)

javascript - 如何使用javascript压缩IPV6地址?

c# - C#中的模式匹配问题

python - 确定 OR 正则表达式的哪个片段与字符串匹配