2012-03-22 9 views
1

上記の結果を得るためにこの正規表現を修正するには?正規表現 - 複数の一致

正規表現:(0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[(?:M|V|P)(?:[^\[])*])

文字列:LCR005B"*ADM-CID"9876R579BDFL789ABC#12345A[4D32FC2B12345A|113002065][Vanydata][M1234567890AB][Panydata]

結果は次のようになります。

  1. 005B
  2. "* ADM-CID"
  3. R579BDF
  4. L789ABC
  5. #12345A
  6. [4D32FC2B12345A | 113002065]
  7. [Vanydata]
  8. [M1234567890AB]
  9. [Panydata]

その後編集:これは、現在出力

  1. 005B
  2. "* ADM-CID"
  3. R579BDF
  4. L789ABC
  5. #1 12345A
  6. [4D32FC2B12345A | 113002065]
  7. [Vanydata]
+1

そして、何に動作しない、いただきました!現在の成果? – Alex

+0

'[]'が必要であるか、出力されていないとOKです。 – RanRag

+0

ブラケットが必要です。 –

答えて

1

これは、あなたの正規表現:

(0(?:[0-9]|[A-F]){3}) 
(\"\*?(?:SIA-DCS|ADM-CID|NULL)\") 
(\d{4}) 
(R?(?:[0-9]|[A-F])*) 
(L[^#]*) 
(#[^\[]*) 
(\[[^\[]*) 
(\[(?:M|V|P)(?:[^\[])*]) 

キャプチャグループは8つしかありません。は何も繰り返されません。なぜ10個のグループを出力する必要があると思いますか?

OK、最後のグループの(?:M|V|P)のため、最後の3つの角括弧の内容と一致することができますが、このグループは繰り返されないため、最初のものと一致します。

あなたは2つの可能性があります。

  1. (0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[(?:M|V|P)(?:[^\[])*])+ 
    

    または

    (0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[(?:M|V|P)(?:[^\[])*]){3} 
    

    これは今最後までの文字列にマッチします最後のグループの後ろに数量詞を置くが、唯一の8キャプチャグループとコンテンツが残っています最後の1つは、もはや "[Vanydata]"ではなく、このグループの最後の試合 "[Panydata]"

  2. これは今10のキャプチャグループを持っていないと、結果が予想通りで、あなたの正規表現に

    (0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[(?:M|V|P)(?:[^\[])*])(\[(?:M|V|P)(?:[^\[])*])(\[(?:M|V|P)(?:[^\[])*]) 
    

    をさらに2つのグループを追加します。これら3つの最後のグループの開始文字は常にグループごとに同じである場合は、

    (0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[V(?:[^\[])*])(\[M(?:[^\[])*])(\[P(?:[^\[])*]) 
    

    にそれを簡素化することができますhere on Regexr

それを参照してください更新

オプションの何かを作ることができますそれ以降に疑問符を追加してください。

(0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[[VMP](?:[^\[])*])?(\[[VMP](?:[^\[])*])?(\[[VMP](?:[^\[])*])? 

here on Regexrを参照してください。一致する部分にマウスを合わせると、キャプチャグループの内容が表示されます。

+0

ありがとう、ステマ。しかし、私は実際に両方の選択肢を避けたいと思うでしょう。 –

+0

だから、あなたはそのソリューションから何を期待しますか? – stema

+0

最後の3つのアイテムを3つのグループとして一度に提供します。つまり、処理後で、パターンを3回追加する必要はありません。 –

0

問題は、最後のRegexキャプチャグループのようです。 (\[(?:M|V|P)(?:[^\[])*])は機能していないようです。

この正規表現のキャプチャグループ\[(\w.*|(M|V|P)\d{10}AB)\]は、最後の3つの括弧で囲まれた単語をキャッチします。

完全な正規表現:(0(?:[0-9]|[A-F]){3})(\"\*?(?:SIA-DCS|ADM-CID|NULL)\")(\d{4})(R?(?:[0-9]|[A-F])*)(L[^#]*)(#[^\[]*)(\[[^\[]*)(\[(\w.*|(M|V|P)\d{10}AB)\])

関連する問題