编程语言
首页 > 编程语言> > 这个正则表达式(VBScript / JavaScript风格)有什么问题?

这个正则表达式(VBScript / JavaScript风格)有什么问题?

作者:互联网

我正在尝试在使用Microsoft VBScript正则表达式5.5(应与JavaScript正则表达式相同)的VBA代码中运行正则表达式.

正则表达式:^ [0-9A-Z]?[0-9A-Z] {3} [A-Z]?([0-9A-Z] {6})-?([0-9])?$
输入:X123A1234567
匹配:123456

我感兴趣的六个字符可以很好地匹配123456,而忽略最后一个(校验)数字.完善. (支票号码被捕获,但这对我来说不是主要的问题.)

但是当两个可选部分都消失了(它们是可选的)时,比赛将抓住最后一位.

好:

输入:123123456
匹配:123456

没有字母,没有校验位.很好的搭配.

输入:123A1234567
匹配:123456

保留可选的中间字母,取出可选的前导字母,保留校验位,我们仍然获得很好的匹配123456.

输入:X1231234567
匹配:123456

保留可选的前导Alpha,取出中间的可选Alpha,保留校验位,我们仍然得到很好的匹配123456.

输入:1231234567
符合:234567

取出两个可选的字母,保留校验位,我们得到的匹配不良是234567.

看看http://www.regular-expressions.info/javascriptexample.htmlhttp://www.regular-expressions.info/vbscriptexample.html上的正则表达式测试器.

我在想什么?当两个可选字母都缺失时,如何使正则表达式忽略最后一位?正则表达式用于提供查询系统,因此无论输入数据采用哪种格式,我们都可以匹配一个完整的值.

更新:以上示例都不包含连字符(在正则表达式中显示).带连字符和校验位的输入数据始终匹配.

更新:正则表达式正常运行,这要归功于以下建议(谢谢!):

正则表达式:^ [A-Z]?[0-9] {3} [A-Z]?([0-9] {6})-?([0-9])?$

解决方法:

如果删除可选的前导字母,则1匹配第一个字符类[0-9A-Z]?并且没有理由放弃它,因为整个正则表达式都匹配-毕竟,正则表达式中的最后一位是可选的.

由于它似乎不是可选的(您只是不想匹配它),请删除结尾的?,并且正则表达式应该起作用.

还是制作正则表达式的第一部分[A-Z]?因此它永远不会与数字匹配-如果符合您的规则.

标签:vbscript,vb6,javascript,regex,vba
来源: https://codeday.me/bug/20191210/2098812.html