2012-10-22 121 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