验证不完整的正则表达式

时间:2013-03-25 12:07:11

标签: regex

假设我们有正则表达式,在我的情况下,我发现它与英国汽车登记牌相匹配:

^([A-Z]{3}\s?(\d{3}|\d{2}|d{1})\s?[A-Z])|([A-Z]\s?(\d{3}|\d{2}|\d{1})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})

典型的英国汽车注册

HG53CAY

这与正则表达式正确匹配,但我想要做的是找到一种匹配任何前缀子字符串的方法,因此以下内容都是有效的:

H, HG, HG5, HG53, HG53C, HG53CA, HG53CAY

是否有建议的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

首先,我会将你的正则表达式重写为:

^([A-Z]{3}\s?(\d{1,3})\s?[A-Z])|([A-Z]\s?(\d{1,3})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})

因为\d{3}|\d{2}|d{1}部分没有意义,应该写成\d{1,3}

重写正则表达式

^([A-Z]{0,3}\s?(\d{0,3})\s?[A-Z]?)|([A-Z]\s?(\d{0,3})\s?[A-Z]{0,3})|(([A-HK-PRSVWY][A-HJ-PR-Y]?)\s?([0]?[2-9]?|[1-9]?[0-9]?)\s?[A-HJ-PR-Z]{0,3})

应该具有允许仅匹配注册开头的期望效果,但不幸的是,不再保证完整注册将是有效注册,因为我必须使大多数字符可选。

你可能会尝试这样的事情

^(([A-Z]{3})|[A-Z]{1,2}$)\s?((\d{1,3})|$))...

要求它要么每个部分都完整,要么它不完整,但后面跟着“字符串结束”,由正则表达式中的$表示。