2017-08-26 8 views
0

オプションのネストされたcaptchingグループ

Invoice Date: {InvoiceDate(dd.mm.YYYY)} 
Inoice Number: {InvoiceNumber} 

私は抽出しようとしています

  • マッチ1:
    1. InvoiceDate
    2. DD.MM.YYYY
  • マッチ2:
    1. InvoiceNumber

私は、請求書の日付のために働いてthis regexを得た:

\{([^}]+)\(([^)]+)\)\} 

First regex result

しかしobiou sly、(dd.mm.YYYY)はオプションではありません。

は、その後、私はthis regexを試してみました:(?:)?構文を使用して

\{([^}]+)(?:\(([^)]+)\))?\} 

は、どのように私はでき、私の内側のcaptchingグループ(DD.MM.YYYY)

Second Regex result

を無視しているようです\(([^)]+)\)をオプションにしますか?あなたが最初のキャプチャグループは怠け者にする必要があり

答えて

2

\{([^}]+?)(?:\(([^)]+)\))?\} 
     ^

demo hereを参照してください。

あるいは、^(で最初のキャプチャグループ内の文字を制限するので、それだけでカッコまで一致します

\{([^(]+)(?:\(([^)]+)\))?\} 
    ^
+0

はどうもありがとうございました:G、Iは、

  • ステップ!すぐに私ができるように受け入れる:) –

  • 1

    私はその後、私が並んで比較しなければならなかった、それは最初から入力して動作するようになりました私たちの答えに違いがあったのを見てください:

    /\{([^}(]+)(?:\(([^)]+)\))?\}/ // my answer 
    /\{([^}]+)(?:\(([^)]+)\))?\}/ // your answer 
    

    私はあなたの最初のキャプチャグループを開いた丸い括弧を含まないように指定しました。あなたのものは最初のグループに文字列全体をキャプチャしていたでしょう.2番目のグループは何も残しません。

    ここにはlinkがあります。

    0

    それぞれの物を別々につかまえてみませんか?

    invoice date: {(.*?)\((.*?)\)}.*?invoice number: {(.*?)}

    • フラグ:348

    Demo

    関連する問題