2017-02-08 8 views
1

複数の行にわたって繰り返しパターンをキャッチするのに問題があります。 これは簡単なことですが、うまく動作しないようです。複数行にわたる正規表現のキャッチパターン

Check this exampleUsers of (.*\s*)

Users of 85838NAVSIM_F: (Total of 2 licenses issued; Total of 2 licenses in use) 

----- ends here! 

    "85838NAVSIM_F" v1.000, vendor: adskflex 
    floating license 

    1 RESERVATION for PROJECT 1 (SRV02/27000) 

----- should catch to here (and repeat on next)! 

Users of 67600NAVMAN_F: (Total of 2 licenses issued; Total of 2 licenses in use) 

    "67600NAVMAN_F" v1.000, vendor: adskflex 
    floating license 

    1 RESERVATION for PROJECT 2 (SRV02/27000) 

理由だけ.*(?改行を含む任意の文字、複数回)は、複数の行をキャッチするのに十分ではないでしょうか?正規表現を意図したとおりに動作させるにはどうすればよいですか?

ありがとうございます!

+0

ここでのルールは何ですか?どのようにパターンを定義しますか? –

+0

私は次の出現まで "ユーザーの"と前方にキャッチしたいです。 – mottosson

+1

https://regex101.com/r/SXeVCr/1のように –

答えて

0

私は焼き貪欲トークンを使用することをお勧めしてJSの正規表現では、ドットの行動が原因DOTALL/s修飾子が存在しないために再定義することはできませんので、任意の文字に一致するように[^]または[\s\S]のいずれかに依存しています。

使用

/^Users of (?:(?!^Users of)[\s\S])*/gim 

regex demo

詳細

  • ^を参照してください - ラインの開始(m修飾子が使用されているように、^は、文字列のとの開始と一致するがライン)
  • Users of - リテラル文字列
  • (?:(?!^Users of)[\s\S])*
  • - 任意の文字にマッチ焼戻し貪欲トークン(= [^][\s\S]参照)0回以上(*参照)ライン
の開始時 Users ofサブストリングを開始しません

同じ広げられた正規表現が

/^Users of .*(?:\r?\n(?!Users of).*)*/gim 

ようになりますがanother regex demoを参照してください。ここで

、焼き貪欲トークンは

  • .*として繰り出される - Users of
  • (?:\r?\n(?!Users of).*)*後の行の残りの部分 - の0回以上の繰り返し:
    • \r?\n - 改行(一般的なスタイル改行に一致するように(?:\r\n?|\n)に置き換えることができます)。
    • (?!Users of) - それに続く部分はUsers of部分文字列
    • .* - 残りの部分は続きます。
+1

パーフェクト!ありがとう!私よりも少し複雑です!= P – mottosson

+0

unrolled regexはもっとそれは改行時に「つまずく」だけなので、効率的です。貪欲な象徴トークンは、各文字に「つまずき」ます。 –

関連する問題