改行を含むすべての文字に一致する正規表現


223

「改行を含むすべての文字」に一致する正規表現はありますか?

たとえば、以下の正規表現では、一致時に新しい行が含まれない$2ため、からの出力はあり(.+?)ません。

$string = "START Curabitur mollis, dolor ut rutrum consequat, arcu nisl ultrices diam, adipiscing aliquam ipsum metus id velit. Aenean vestibulum gravida felis, quis bibendum nisl euismod ut. 

Nunc at orci sed quam pharetra congue. Nulla a justo vitae diam eleifend dictum. Maecenas egestas ipsum elementum dui sollicitudin tempus. Donec bibendum cursus nisi, vitae convallis ante ornare a. Curabitur libero lorem, semper sit amet cursus at, cursus id purus. Cras varius metus eu diam vulputate vel elementum mauris tempor. 

Morbi tristique interdum libero, eu pulvinar elit fringilla vel. Curabitur fringilla bibendum urna, ullamcorper placerat quam fermentum id. Nunc aliquam, nunc sit amet bibendum lacinia, magna massa auctor enim, nec dictum sapien eros in arcu. 

Pellentesque viverra ullamcorper lectus, a facilisis ipsum tempus et. Nulla mi enim, interdum at imperdiet eget, bibendum nec END";

$string =~ /(START)(.+?)(END)/;

print $2;

1
次のような正規表現の修飾子/フラグについてお読みください:m、s(m / regex /
ims

回答:


194

改行を一致させる正規表現にs修飾子を追加します.

$string =~ /(START)(.+?)(END)/s;

32
JavaScriptの場合:(START)[\ s \ S] *(END)-テストするにはwww.regexpal.comを参照してください
Zymotik

1
Zymotikさんのコメント@に関する詳細情報については、以下を参照してください。stackoverflow.com/questions/1068280/...
ヤコブ・ファン・リンゲン

2
Javaでは、正規表現の先頭にインライン修飾子(?s)を使用できます。たとえば、「yourPattern」の使用後に改行を含む任意の文字を置き換えることができ"(?s)yourPattern.*"ます。以下
LukeSolar

Rubyでは、修飾子はmではなくsです。参照:rubular.com
Jon Schneider

312

/s正規表現修飾子を追加したくない場合(おそらく.、正規表現の他の場所で元の意味を保持したい場合)、文字クラスを使用することもできます。1つの可能性:

[\S\s]

スペースではない、またはスペースである文字。つまり、任意の文字。

次のように、正規表現のごく一部で修飾子をローカルに変更することもできます。

(?s:.)

2
+1 (?s:.)自分で構文を入れようとしていました。
BoltClock

(?:.|\n)エレガントさが劣ることを除いて、何らかの点で劣っていますか?
VlastimilOvčáčík2016年

([\S\s]+)私が探していたものです。ありがとう。+1
ライアン

VlastimilOvčáčík@あなたがそれを使用する場合は、1つは、実行時のために本当に悪いことができる*か、+2 ^ n個の異なる方法があるので、それは長さnの任意の文字列を一致させることができます。
Radon Rosborough、

8

うん、あなたはちょうど.マッチ改行を作る必要があります:

$string =~ /(START)(.+?)(END)/s;

-5

「マルチライン」を利用したい。

$string =~ /(START)(.+?)(END)/m;

6
いいえ、とアンカーにはm影響しますが、には影響しません。^$.
BoltClock

興味深い、ありがとう。OPが求めていることを正確に実行しようとしたことはありません。
nadime
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.