1

假设我们有一个正则表达式,就我而言,它是我发现与英国汽车牌照匹配的一个:

^([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

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

4

1 回答 1

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})|$))...

使其要求每个部分都是完整的,或者它不完整但后跟“字符串结尾”,由正$则表达式中的 表示。

于 2013-03-25T12:25:24.470 回答