2013-05-30 17 views
5

2つの文字列の間にあるすべての正規表現はどのように正規表現しますか? 2つの文字列の間には複数の行があり、すべてのhtml文字を含むことができます。例えば正規表現は2つの文字列の間にあるすべての文字列にマッチします。

<p>something</p> 

<!-- OPTIONAL --> 

<p class="sdf"> some text</p> 
<p> some other text</p> 

<!-- OPTIONAL END --> 

<p>The end</p> 

は私が全体のオプションの一部を取り除くしたいです。しかし、貪欲な任意の文字の一致は私が望んでやっていません..私は使用しているパターンが

  • <!-- OPTIONAL -->.*<!-- OPTIONAL END -->
  • <!-- OPTIONAL -->(.*)<!-- OPTIONAL END -->
  • <!-- OPTIONAL -->(.*)\s+<!-- OPTIONAL END -->
  • (?=<!-- OPTIONAL -->)(.*)\s+<!-- OPTIONAL END -->

それらのすべてであります最初の部分タグのみが与えられていても、完全な行ではうまくいかない場合は、最初のオプションタグとマッチします。 http://regexr.com?352bk

おかげ

+0

正規表現は使用しないでください。 http://stackoverflow.com/q/1732348/34397 – SLaks

+0

あなたはどの言語を使用していますか? – rednaw

+0

@SLaks XMLパーザはHTMLコメントを考慮に入れますか? – rednaw

答えて

5

チェックRegExrでDOTALLチェックボックス:)

DOTALLフラグなし(/regex/ss)、ドット(.)一致しません:ここでは

は一例です送料は返却されます。

.*の代わりに.*?を使用して、オプションのコンテンツを遅延一致させる必要があります(例のPLEASE DO NOT MATCH!文を参照)。

+0

ああを使用しています!ドットオールって何ですか?それは何ですか? – LocustHorde

+0

@LocustHorde私は編集しました。 – sp00m

+0

@LocustHordeデフォルトで正規表現( '.')のワイルドチャード文字は改行文字と一致しません。つまり、正規表現は行末で検索を停止します。 dotallを有効にすることによって '.'はそのマッチに改行文字も含めます。 –

1

"dotall"オプションを有効にします。正規表現では、改行文字と一致し、複数行にわたって動作します。正規表現の実装に応じてこれを行うにはさまざまな方法がありますが、実装のマニュアルを確認してください。

+0

ありがとう(フィラーテキスト) – LocustHorde

7

正規表現ungreedyようにするには、*?を使用します。

<!-- OPTIONAL -->(.*?)<!-- OPTIONAL END --> 

は、このヘルプあなたをしていますか?

また、使用しているプログラミング言語によっては、正規表現ドット(.)も改行文字と一致させる修飾語があります。 PHPのためには、例えばs(DOTALL)修飾子持っている:私は答えを見つけたと思うあなたの例で遊ん

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

+0

マルチラインはOPに必要なものではありませんが、ドットオールのものです。 Multilineは '^ $'アンカーを1つではなく複数の行にマッチさせます。 – sp00m

+0

いいです、私の答えは – rednaw

+0

ありがとう! (フィラーテキスト) – LocustHorde

1

を、あなたのコードでこれを確認してください。

<!-- OPTIONAL -->[\w\W]*<!-- OPTIONAL END -->

私はこのヘルプを希望します

関連する問題