2

スカナリオ

構成された文字列から部分文字列を取得する必要があります。一致条件:

  • 文字列は「section1:」で始まります

  • キャプチャされた文字列は、空白で区切られた、またはダッシュで区切られた英数字のリストです。

  • キャプチャされた文字列が特定のサフィックス ('-xx') で終わる場合、キャプチャされた文字列からサフィックスを除外します。

section1:ypsilon : セクション 1 が一致し、「ypsilon」を取得します

section1:ypsilon zeta : セクション 1 が一致し、「ypsilon zeta」を取得します

section1:ypsilon-zeta : セクション 1 が一致し、「ypsilon-zeta」を取得します

section1:ypsilon-xx : セクション 1 が一致し、「ypsilon」を取得し、「-xx」を除外します

section1:ypsilon zeta-xx : セクション 1 が一致し、「ypsilon zeta」を取得し、「-xx」を除外します

section1:ypsilon-zeta-xx : セクション 1 が一致し、「ypsilon-zeta」を取得し、「-xx」を除外します

section2:ypsilon : セクション 2 が一致しません

これまでの解決策

^section1:([a-zA-Z0-9\- ]+)(\-xx)?$

アイデアは、グループ 1 を取得することですが、グループ 2 はオプションです。 デモ

質問

残念ながら、接尾辞はグループ 1 の定義と一致します。これは、ダッシュ付きのアルファベット文字列であるためです。そのため、キャプチャされた結果の文字列はサフィックスを除外しません。

どんな手掛かり?

4

2 に答える 2

3

あなたが直面している主な問題は、オペレーターの貪欲さです。

n+できるだけ多く一致しnます。これを減らしたい場合は、接尾辞を付ける必要があります?

私はここでこの正規表現デモで終わります

^section1:([a-zA-Z0-9\- ]+?)(|-xx)$

主な違いは、貪欲ではない (または気が進まない) ようにするための?+にあり、グループの代わりに空と欲望の接尾辞を交互に使用することを好み(|-xx)ます-xx

好みの問題だと思いますが、両者の間に議論はありません。

于 2015-05-06T14:03:44.547 に答える