假设我们有一个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
有没有建议的方法来实现这一点?
发布于 2013-03-25 20:25:24
首先,我将重写您的regexp,使其如下所示:
^([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}
编写。
重写regexp,如
^([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})|$))...
要使其生效,需要每个部分都是完整的,或者是不完整的,但后跟“字符串结束”,由正则表达式中的$
表示。
https://stackoverflow.com/questions/15614538
复制相似问题