2010-06-07 124 views
0

我正在用正則表達式工作,並在javascript中有一些行。我的表達應該提供兩場比賽,但只承認一場比賽,我不知道問題是什麼。正則表達式 - 想要兩場比賽只獲得一場比賽

線在JavaScript是這樣的:

if(mode==1) var adresse = "?APPNAME=CampusNet&PRGNAME=ACTION&ARGUMENTS=-A7uh6sBXerQwOCd8VxEMp6x0STE.YaNZDsBnBOto8YWsmwbh7FmWgYGPUHysiL9u0.jUsPVdYQAlvwCsiktBzUaCohVBnkyistIjCR77awL5xoM3WTHYox0AQs65SoHAhMXDJVr7="; else var adresse = "?APPNAME=CampusNet&PRGNAME=ACTION&ARGUMENTS=-AHMqmg-jXIDdylCjFLuixe..udPC2hjn6Kiioq7O41HsnnaP6ylFkQLhaUkaWKINEj4l2JqL2eBSzOpmG.b5Av2AvvUxEinUhMBTt5awdgAL4SkBEgYXGejTGUxcgPE-MfiQjefc="; 

我的表情看起來是這樣的:

(?<Popup>(popUp\(')|(adresse...")).*\?((?<Parameters>APPNAME=CampusNet[^>"']*["'])) 

我想有APPNAME兩場比賽......作爲參數。

[更新]像蒂姆Pietzcker寫我使用貪婪的版本,應該使用懶惰的版本。而他寫道,我自己通過使用來解決它。 ?代替 。在表中看起來像這樣:

(?<Popup>(popUp\(')|(adresse...")).*?\\?((?<Parameters>APPNAME=CampusNet[^>"']*["'])) 

工作。感謝蒂姆Pietzcker

+0

這是您正在使用的C#或Java嗎? – Tomalak 2010-06-07 10:14:06

回答

1

您的正則表達式匹配過多 - 從最初的adresse直到最後一個",因爲它使用貪婪量詞.*

如果你讓量詞懶,我。即

(?<Popup>(popUp\(')|(adresse...")).*?\?((?<Parameters>APPNAME=CampusNet[^>"']*["'])) 

你得到兩場比賽。

或者,如果您的數據允許這樣做,請使用僅匹配非空格字符的不同量詞。這將匹配得更快(但當然如果您嘗試匹配的文本可能包含空格將會失敗):

(?<Popup>(popUp\(')|(adresse..."))\S*\?((?<Parameters>APPNAME=CampusNet[^>"']*["'])) 
1

通常你必須應用與「全球」標誌的正則表達式來查找所有匹配。在我看到您正在使用的完整代碼示例之前,我無法多說。