1

如果我有以下简化字符串:

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

如何仅使用正则表达式获得以下内容?

string12131-itemB-icon4535,

所有数字都是未知的。唯一已知的部分是 itemA、itemB、itemC、string 和 icon

我已经尝试过string.+?itemB.+?,,但它也从第一次出现string而不是与 itemB 相邻的那个开始出现

我也尝试过[^icon]在不同位置使用 itemB 之前,但无法让它工作。

4

4 回答 4

3

试试这个:

string[^,]+itemB[^,]+,
于 2012-10-22T00:53:56.087 回答
2

试试这个正则表达式

 string\d+-itemB-icon\d+,
于 2012-10-22T00:56:24.587 回答
2

使用一组受限字符而不是通配符的给定解决方案是最简单的,但要在一般问题上获得更多信息:您得到了正确的非贪婪量词部分,但非贪婪并不会阻止匹配器作为许多字符,因为它需要找到一个匹配。您可能正在寻找原子组运算符,(?>group).一旦组匹配某些内容,如果匹配器需要回溯,它将被原子处理。

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

在您的示例中,组匹配string331-item,但B不匹配R,因此整个组被扔掉,搜索移至下一个string

于 2012-10-22T01:14:54.267 回答
0

您没有提到逗号分隔项目作为已知部分,但在示例正则表达式中使用它,所以我认为它可以在解决方案中使用。尝试将逗号排除为字符集,而不是与“.”匹配。

于 2012-10-22T01:01:36.010 回答