我試圖在使用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