我试图在使用Microsoft VBScript正则表达式5.5(应该与JavaScript正则表达式相同)的VBA代码中运行正则表达式。这个正则表达式(VBScript/JavaScript flavor)有什么问题?
正则表达式:^[0-9A-Z]?[0-9A-Z]{3}[A-Z]?([0-9A-Z]{6})-?([0-9])?$
输入:X123A1234567
比赛:123456
六个字符我感兴趣给出123456
的良好匹配,忽略了最后一个(校验)位。完善。 (检查数字被捕获,但它不是我主要关心的。)
但是,当两个可选部分都不存在时(它们的是可选),匹配会抓取最后一位数字。
GOOD:
输入:123123456
比赛:123456
没有阿尔法,无校验位。良好的匹配。
GOOD
输入:123A1234567
比赛:123456
留在可选的中间α,取出可选的领先α,在校验位离开,我们仍然得到123456
的良好匹配。
GOOD
输入:X1231234567
比赛:123456
留在可选的领先α,取出中间的可选alpha,在校验位离开,我们仍然得到123456
的良好匹配。
BAD
输入:1231234567
比赛:234567
取出都是可选的阿尔法,在校验位离开了,我们得到的234567
不好的比赛。
查看http://www.regular-expressions.info/javascriptexample.html或http://www.regular-expressions.info/vbscriptexample.html上的正则表达式测试程序。
我在想什么,在这里?当两个可选的alpha都丢失时,如何获得正则表达式来忽略最后一位数字?正则表达式用于提供查找系统,因此无论输入数据的格式如何,我们都可以匹配完整的值。
更新:上述示例没有包含连字符(以正则表达式显示)。带连字符和校验位的输入数据始终匹配。
更新:工作正则表达式,感谢下面的建议(谢谢!):
正则表达式:^[A-Z]?[0-9]{3}[A-Z]?([0-9]{6})-?([0-9])?$
我认为就是这样。我将不得不验证初始可选字符是否只是字母或字母数字。 – 2010-05-20 16:33:44
就是这样。规格有点朦胧,但我意识到他们使用“字符”仅用于字母,而“数字”仅用于数字。数字是有道理的,但我认为字符是字母数字。 – 2010-05-20 16:42:44