10

2 つの文字列の間にあるすべてのものを正規表現で一致させるにはどうすればよいですか? 2 つの文字列の間にあるものは複数の行にまたがり、すべての html 文字も含めることができます。

例えば:

<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

ありがとう

4

4 に答える 4

8

正規表現を非貪欲にするには、 の?後にa を使用し*ます。

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

これは役に立ちますか?

.また、使用するプログラミング言語によっては、正規表現のドット ( ) を改行にも一致させる修飾子があります。PHP の場合、たとえばs(dotall) 修飾子があります。

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

于 2013-05-30T15:34:07.217 に答える
2

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

于 2013-05-30T15:30:59.300 に答える