用于测试字符串部分长度的正则表达式

时间:2011-11-09 09:34:20

标签: regex

嗨我需要一个接受以下字符串的正则表达式:

[A-Z]-[A-Z]{3-5}[0-9]{2-4}

例如 X-ABC123 Y-AB1234

现在的问题是连字符右侧的字符串总长度必须始终为5个字符。是否有机会仅使用正则表达式检查?

3 个答案:

答案 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}$

here on Regexr

(?=.{5}$)部分只是查看,如果从其位置到结尾($)有5个字符。

但如前所述,如果3-5和2-4以及整体5有效,你可以做到

^[A-Z]-[A-Z]{3}[0-9]{2}$