2012-10-22 157 views
1

如果我有以下簡單的字符串:正則表達式非貪婪匹配

 string331-itemR-icon253,string131-itemA-icon453, 
string12131-itemB-icon4535,string22-itemC-icon443 

我怎麼只能用正則表達式只以下?

string12131-itemB-icon4535, 

所有的數字是未知的。唯一已知的部分是 意達,itemB,itemC,字符串和圖標

我試過string.+?itemB.+?,,但它也從string第一次出現,而不是相鄰的一個回升到itemB

我也嘗試使用[^icon]之前的itemB在各種職位,但不能得到它的工作。

回答

3

試試這個:

string[^,]+itemB[^,]+, 
2

試試這個正則表達式

string\d+-itemB-icon\d+, 
0

你不提的逗號分隔的項目,如已知部分,但在本例中使用它的正則表達式,所以我認爲它可以在解決方案中使用。嘗試排除逗號作爲字符集而不是匹配「。」。

2

給定的解決方案使用一組受限制的字符而不是通配符是最簡單的,但要獲得更多的一般問題:非貪婪的量詞部分是正確的,但是非貪婪並不妨礙匹配者需要儘可能多的角色來尋找匹配。您可能正在尋找atomic group運營商,(?>group).一旦該組匹配的東西,它將被原子處理,如果匹配器需要回溯。

(?>string.+?item)B.+?, 

在你的榜樣,在小組賽string331-item,但B不匹配R因此整個集團的顛簸,搜索移動到下一個string