1

次の単純化された文字列がある場合:

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

正規表現のみを使用して以下を取得するにはどうすればよいですか?

string12131-itemB-icon4535,

数値はすべて不明です。既知の部分は、itemA、itemB、itemC、文字列、およびアイコンのみです。

私は試しましたが、itemBに隣接するものではなくstring.+?itemB.+?,、最初に出現したものからもピックアップしますstring

[^icon]また、さまざまな位置で itemB の前に使用しようとしましたが、機能しませんでした。

4

4 に答える 4

3

これを試して:

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

ワイルドカードの代わりに文字の制限されたセットを使用する特定のソリューションは最も単純ですが、一般的な質問でさらに理解するには: 貪欲でない量指定子の部分は正しいですが、貪欲でないからといってマッチャーが一致を見つける必要があるため、多くの文字。アトミック グループ演算子を探しているかもしれません(?>group).。グループが何かに一致すると、マッチャーがバックトラックする必要がある場合にアトミックに処理されます。

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

あなたの例では、グループは一致string331-itemしますが、一致BしないRため、グループ全体が破棄され、検索は次の に移動しstringます。

于 2012-10-22T01:14:54.267 に答える
2

この正規表現を試してください

 string\d+-itemB-icon\d+,
于 2012-10-22T00:56:24.587 に答える
0

既知の部分としてアイテムを区切るコンマについては言及していませんが、正規表現の例で使用しているため、ソリューションで使用できると思います。「.」と照合するのではなく、コンマを文字セットとして除外してみてください。

于 2012-10-22T01:01:36.010 に答える