2016-09-14 15 views
3

="で始まり、次に"で終わる文字列を取得する必要があります。しかし、それは<シンボルを含むべきです。正規表現の条件を追加する方法は?

(="([^"])*<*") 

文字列:

dit niet "dit wel" dit ook niet ="maar <dit ""en""dit ook" 
REM dit niet "dit <wel" dit ook niet ="maar dit ""en""dit ook" 
dit niet "dit wel" REM "maar dit ""en""dit ook" 

上記のコードは私に2つの文字列を与え、私は一つだけが下記取得する必要があります。

期待される結果:

="maar <dit " 

実際の結果:

="maar <dit " 
="maar dit " 

注: は="で開始し、<を持っているすべての結果を取得する必要がありますし、"

答えて

3
の次の出現で終了

="([^"])*<*"正規表現は="と一致します任意の繰り返し"以外の文字(それが唯一の最後の発生は、グループ1バッファに保存されるように)、その後、ゼロ以上"に続い<シンボルをキャプチャします。だから、あなたの正規表現は実際に<あなたが一致する文字列に存在する必要がありますが必要です。: - - ="シーケンス

  • ([^"<]*<[^"]*)グループ1の値を保持します

    • ="

      あなたはregex demo

      詳細を参照してください

      ="([^"<]*<[^"]*)" 
      

      を使用することができます

      • [^"<]* - ゼロ以上"以外の文字と<
      • <から<シンボル
      • [^"]* - "
    • "
    • 以外ゼロ以上の文字 - 二重引用符
  • +0

    が含まれていることを確認し、あなたは '* +'ではなく '*'使用することを検討すべきです。あなたの答えは、一致する場合のバックトラックを回避しますが、エンジンは、一致しない場合に時間を浪費し、その文字を含むことができない場所で文字を検索します。 – Holger

    +0

    @Holger JS正規表現は、所有量限定子をサポートしていません。 –

    +0

    質問には '[javascript]' *と* '[java]'というタグが付いていて、混乱が起こりました。私は、OPはそれらの1つを決定する必要があります... – Holger

    2

    正規表現を切り替えるライブ

    (="([^"]*<[^"]*)*") 
    

    here

    この部分([^"]*<[^"]*)に不必要なバックトラックを気にしている場合、あなたの内側の文字列が<

    +2

    最初の '[^"] * 'パターンが合理化される方法を私の答えを参照してください。 –

    関連する問題