2012-01-25 31 views
0

我試圖提取該格式的字符串:匹配子與前述或聯合

preceeding-string-data-i-want 

其中:

preceeding-string 

應該是stringAstringBstringC之一。

我試着使用:

(?:stringA|stringB|stringC)-?([A-Za-z\d]*) 

但是這會導致不正確的匹配。我無法弄清楚我要去哪裏錯了。

- 編輯 -

匹配stringA-pine-9000給我stringA-pinepine火柴。

+1

不正確的什麼樣的比賽? (請詳細說明您看到的錯誤行爲。) – Amber

+0

已更新的問題 – zsquare

+0

以您的示例爲例,您希望獲得哪些匹配項? – Amber

回答

1

如果你想匹配pine-9000,你可能需要在字符的集合-允許在第二組:

(?:stringA|stringB|stringC)-?([A-Za-z\d-]*) 
+0

像這樣的時代,唯一的反應是,do'h!謝謝! – zsquare

0

像這樣的東西應該做的伎倆:

((stringA)|(stringB)|(stringC))-?([A-Za-z\d]*)

它將匹配:stringA-dataIWantfffstringBDataIWantstringC-DataIWant123但不stringD-DataIWant,它將匹配除了[email protected]@一切。

我看到的問題是,在data-i-want部分中,您已包含破折號(-),您未包含在原始正則表達式中。我假設'data-i-want-不包含破折號。如果確實如此,那麼你可以像這樣添加:

((stringA)|(stringB)|(stringC))-?([A-Za-z\d\-]*)

這將匹配之類的東西:stringA-Data-I-Want