2016-08-05 6 views
-1

私の正規表現のブードゥー教の力は、このいずれかを殴るために十分ではありませんでした:キャプチャしていないグループ「サブクエリ」を繰り返す方法は?

入力:

x|a=1|b=2,y|c=3|d=4,
(ボーナスポイントあなたは私が最後のコンマをドロップすることができた場合)

希望するマッチ(およびグループ):

x|a=1|y=2(X、1、Y、2)
y|c=3|d=4(Y、C、3、D、4)
(ボーナスポイント私はすべてのグループに名前を付けることができる場合)

マイ失敗パターン:基本的に

(x|y|z)(?:\|(.+?)=(.+?))*,

、私が欲しいのx、yのまたはzおよびALL '|'後に「this = that」のペアを分けています。私は取得してい

マッチ(およびグループ):

x|a=1|b=2,(X、B、2)
y|c=3|d=4,(Y、D、4)

Iは、カンマを有しますマッチでは、それは大したことではない、主な問題は、私は各試合の最後の "サブグループ"を取得しているということです。なぜ最初のものは無視されますか?

+0

下のリンクを入れますので、同様の質問にほとんど答えが既に存在していますグループ[?]でキャプチャします。あなたはすでに正しい正規表現を持っていると、すべてのデータを抽出することができます心配しないでください。私はあなたが最後のカンマを落とすことができると思うBtw –

+0

くそー、私はキャプチャを考えなかった。私はテストのウェブサイトを変更するつもりだと思う... – Kilazur

+0

これは独自のフォーマットですか? @ KovpaevAlexeyによると、各サブシーケンスが '[a-z] \ |'で始まっていれば、すでにコンマは必要ありません。しかし、独自の形式の場合は、代わりにJSONまたはXMLを使用します。フルステートマシンに行って、自分で書きましょう。しかし、それは基本的にはもう納得できません。 –

答えて

1

それは繰り返しグループをキャプチャするための.Net正規表現の便利な機能だと私はちょうどあなたが繰り返しキャプチャを見ることができます.NETで

https://stackoverflow.com/a/11051948/1009099

関連する問題