web-dev-qa-db-ja.com

<h1>タグ間のすべての文字に一致する正規表現

私は崇高なテキスト2エディターを使用しています。正規表現を使用して、すべてのh1タグ。

今のところ、私はこのように使っています

<h1>.+</h1>

H1タグに改行がない場合、正常に機能します。

つまり

<h1>Hello this is a hedaer</h1>

正常に動作しています。

しかし、タグが次のようになっている場合は機能しません

<h1>
   Hello this is a hedaer
</h1>

誰かが構文を教えてくれますか?

19
Giri

デフォルトでは、.は改行文字を除くすべての文字に一致します。

この場合、.が改行文字を含むすべての文字と一致するようにするDOTALLオプションが必要になります。 DOTALLオプションは(?s)としてインラインで指定できます。例えば:

(?s)<h1>.+</h1>

ただし、量指定子のデフォルトの動作はgreedy(この場合は+)であるため、機能しないことがわかります。つまり、できるだけ多くの文字を消費しようとします。できるだけ。量指定子?の後に余分な+?を追加して、lazy(できるだけ少ない文字数にする)にする必要があります。

(?s)<h1>.+?</h1>

または、正規表現を<h1>[^<>]*</h1>にすることもできます。この場合、オプションを指定する必要はありません。

44
Anirudha

この質問は、すべての文字を検索しようとする正規表現に対するGoogleの検索結果のトップですbetween h1タグ私もその答えを出すと思いました。それが私が探していたものだったので。

(?s)(?<=<h1>)(.+?)(?=</h1>)

その正規表現を<h1>A title</h1> <p>Some content</p> <h1>Another title</h1>のようなサンプルテキストで使用すると、A titleのみが返されます。

25
aychedee