2010-12-12 53 views
2

我有一個像這樣的字段的字符串:id =「ID-120-1,ID-141-5,ID-92-5,N/A」重複命名捕獲組

我想只將「ID」捕獲到一個指定的捕獲組(即沒有「N/A」或其他可能蠕變的項目)。我認爲這可能工作,但沒有運氣:

\bid=\"(?<id>(ID-\d+-\d+)+) 

任何想法?

回答

1

您正在使用的表達式只返回一個在每個ID值前面。以下調整應該解決這個問題。

(?:(?:=\")|(?:,\s))(?<id>(?:ID-\d+-\d+)*) 

另一種選擇是隻刪除ID =「檢查部分一起

(?<id>(?:ID-\d+-\d+)) 

或者你也可以添加」,「上查詢到ID的末尾,以確保您的在

(?<id>(?:ID-\d+-\d+))(?:(?:,\s)|(?:")) 
+0

太棒了!非常感謝答案和解釋! – 2010-12-13 00:38:11

0

你會需要捕獲逗號和空格也,因爲它們是在你的字符串重複:因爲你的ID開始計數在場

\bid=\"(?<id>(ID-\d+-\d+,)+) 
0

屬性,我相信你正在嘗試做的是不可能用純的正則表達式,特別是如果ID和「N/A」可以混合在一起。你需要有一個循環在你的程序,或如果你使用Perl或PHP,你可以在正則表達式的替換部分(/e開關)中運行代碼以將匹配添加到數組。