2013-10-14 142 views
0

我有一個數據文件,我想用VBScript正則表達式對象進行驗證。正則表達式 - 匹配開始和結束標記

數據:

01THAILAND  000004 
08 000004 05 

正則表達式:^01.{15}[0-9]{6}|^08 [0-9]{6} [0-9]{2}.

如何設置我的模式來解析08開始,如果有相同的代碼「000004」作爲一線爲有效行?其他數據線存在於這兩項之間,代碼不總是'000004'!唯一將保持特定的是2個字符行標識符和格式。

+0

有什麼問題你已經擁有?看起來這樣可以正常工作。 –

回答

0

純粹的正則表達式不會削減它,但這可能不是你正在使用的帽子。

這種事情的廣泛命名稱爲「反向引用」,並允許您在模式本身內包含當前正在匹配的正則表達式的一部分。從sed繼承的通常語法是\1,以引用正則表達式的第一個捕獲括號。

所以,在你的榜樣它會看起來像:

^01.{15}\([0-9]{6}\) 
.* 
^08 \1 [0-9]{2}. 

請注意,你不匹配的單行了,而是爲整個集團。 (要匹配單行,您需要記住原始代碼並將其明確包含在終止正則表達式中。)因此,您需要確保您的正則表達式引擎能夠進行多行匹配。

0

您可以使用\n作爲反向引用,其中n是捕獲的組的索引。演示:

str = "01THAILAND  000004" & vbNewLine & "08 000004 05" 

Set re = new regexp 
re.Pattern = "\d+\w+ +(\d+)\s+\d+ \1 \d+" ' \1 is the back reference 
re.Global = true 

msgbox re.Test(str) 

忍者編輯:你的模式將類似於^01.{15}([0-9]{6})\s{1,2}08 \1 [0-9]{2}

相關問題