2013-06-20 60 views
1

我需要使用正則表達式來解析字符串。正則表達式使用OR表達式的VBScript(|)

大多數時候,該字符串可以使用表達式

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

有時,字符串需要包括額外的4個字符,所以表達式將是

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

由其自身表達將被解析工作在他們各自的字符串。第一個對於用於第二個表達式的字符串在技術上也是有效的,但表達式的。{0,9}部分將被關閉4個字符。

 
A quick explanation of the expression: 
Subset 1: 1 - 21 (or 25 characters) 
any characters a-z 
any characters A-Z 
the dash, the comma 
any digits 0-9 
the open and close parenthesis, the hash tag, forward slash, space and period. 

Subsets 2-7 
Any characters (up to 9 total) 

我希望這樣的事情表達低於

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21|25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

OR

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21}|{1,25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

我想這和他們沒有工作。任何人有任何想法?

回答

1

這是相當詳細,但我想你可以這樣做:

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21}|[a-zA-Z\-\,0-9\(\)\#\/ \.]{25})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9})(.{0,9}) 

第一個捕獲組必須是1-21個字符,或長25個字符。

如果你願意改變你的組是如何拍攝的(如果你的正則表達式引擎支持的話),你或許也能做到這一點:

^([a-zA-Z\-\,0-9\(\)\#\/ \.]{1,21}|[a-zA-Z\-\,0-9\(\)\#\/ \.]{25})(.{0,9}){6} 
+0

或者它的一組1到分裂21個字符和一個可選的4個字符組:'^([a-zA-Z \ - \,0-9 \(\)\#\/\。] {1,21} - {0-9 \(\)\#\/\。{4})?)(。{0,9}){6}'如果第二個捕獲組具有最後4個字符適用。 – AutomatedChaos

+0

@AutomatedChaos這將匹配組22-24個字符;它相當於'... {1,25}',這是OP所說的不起作用的。事實上,我認爲真正的問題是,模式只是定義不清(應該怎麼知道將最後的0-54個字符分成6組?),但沒有進一步的信息,這是我能給出的最佳答案。 –

+0

是的,你是對的;第一個可以匹配一個19長的字符串,第二個匹配長度爲4的字符串,使其匹配長度爲23的字符串。 當我看到這個問題時,它突然出現在我的腦海中:並非每個問題都適合用正則表達式解決。 – AutomatedChaos