我正在尝试匹配一个SEDOL(正好是7个字符:6个字母数字字符后跟1个数字字符)
我的正则表达式
([A-Z0-9]{6})[0-9]{1}
匹配正确,但是以有效匹配开头的大于7个字符的字符串也匹配(如果你看到我的意思:))。例如:
B3KMJP4
匹配正确,但也是如此:
B3KMJP4x
哪个不匹配。
有谁能告诉我如何避免这种情况?
答案 0 :(得分:6)
正则表达式末尾的美元符号(称为锚点)表示字符串结束:
^([A-Z0-9]{6})\d$
我还在开头添加了“^”,表示字符串的开始并阻止匹配xB3KMJP4 我还简化了原始正则表达式。
顺便说一句,根据维基百科,对于第一个字符,不使用元音。我不太确定这是规则还是惯例。
答案 1 :(得分:5)
您需要同时使用start
和end
anchors
:
^([A-Z 0-9]{6})[0-9]{1}$
这将匹配一个字符串,其中 6个字母数字+空格字符后跟一个数字 。如果将此类字符串设置为较大字符串的 后缀 或 前缀 ,则不匹配。
此外,您可以摆脱{1}
因为[0-9]
本身匹配一个数字。
此外\d
代表一位数字。因此,您可以按如下方式缩短正则表达式:
^([A-Z \d]{6})\d$
答案 2 :(得分:3)
^([A-Z\d]{6})\d$
答案 3 :(得分:3)
您忘记了正则表达式匹配字符串中的任何位置。要修复它,试试这个。
^([A-Z 0-9]{6})[0-9]{1}$
^表示匹配字符串的开头,$表示匹配字符串的结尾。