如何编写匹配行首任意顺序包含B、R、A、S四个字符的正则表达式
符合要求的正则表达式
正确的正则写法如下:
^(?=.{0,3}B)(?=.{0,3}R)(?=.{0,3}A)(?=.{0,3}S).*$
逻辑说明
你之前尝试的正则问题出在正向预查的扫描范围没有做限制,会扫描整行内容,只要整行中出现B、R、A、S四个字符就会匹配,不符合「四个字符必须出现在行首前四位」的要求:
- 每个
(?=.{0,3}X)的作用是限定字符X必须出现在行首前4个字符范围内:.匹配任意单个字符,{0,3}表示最多匹配3次,加上当前行首位置,总扫描范围正好是前4个字符 - 四个正向预查分别校验B、R、A、S四个字符均出现在行首前四位
- 末尾的
.*匹配该行剩余的所有内容
如果你额外要求行首前四位只能由B/R/A/S四个字符组成(不允许插入其他字符),可以使用这个变体:
^(?=[BRAS]{4})(?=.*B)(?=.*R)(?=.*A)(?=.*S).*$
匹配效果验证
对给出的示例文本匹配结果如下:
- 匹配行:BRASIL、BSRAIL、BARSILERO、BRASILERA、BRASILEÑA、BRASILEÑO
- 不匹配行:BARBADOS(前四位无S)、BOSNIA AND HERZEGOVINA(前四位无R、A)
完全符合预期要求。
内容的提问来源于stack exchange,提问作者Coder-M
相关产品推荐
相关产品推荐

