嗨我需要一个接受以下字符串的正则表达式:
[A-Z]-[A-Z]{3-5}[0-9]{2-4}
例如 X-ABC123 或 Y-AB1234
现在的问题是连字符右侧的字符串总长度必须始终为5个字符。是否有机会仅使用正则表达式检查?
答案 0 :(得分:1)
只需在连字符后添加:
/(?=[A-Z\d]{5}$)/
导致:
/^[A-Z]-(?=[A-Z\d]{5}$)[A-Z]{3,5}[0-9]{2,4}/
这假设您的输入字符串是您发布的字符串。
X-ABC123 -> fails
Y-AB1234 -> fails
A-ABD12 -> matches
A-ABV111 -> fails
如果字符串是另一个字符串的一部分,则可以用\ s | $代替$ anchor。
答案 1 :(得分:0)
从语言理论的角度来看,我认为这绝对是可能的。只需将其分组并添加约束:
我只需要知道哪种语言指定了正则表达式,但是这样:
[A-Z]-(^[A-Z][A-Z0-9]4)
我觉得你想要正确的部分从一个字母开始肯定,然后是字符或数字
答案 2 :(得分:0)
首先是你的正则表达式中的问题
量词是{3,5}
而非{3-5}
(这与字面上的匹配“{3-5}”)
您需要3到5个字母和2到4个数字,总共5个字母和数字==>唯一有效的组合是3个字母后跟2个数字。
一般情况下,你可以使用正面的前瞻
^[A-Z]-(?=.{5}$)[A-Z]{3,5}[0-9]{2,4}$
(?=.{5}$)
部分只是查看,如果从其位置到结尾($
)有5个字符。
但如前所述,如果3-5和2-4以及整体5有效,你可以做到
^[A-Z]-[A-Z]{3}[0-9]{2}$