web-dev-qa-db-ja.com

改行を含む任意の文字と一致する正規表現

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

たとえば、以下の正規表現では、マッチング時に$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;
180
kurotsuki

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

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

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

[\S\s]

スペースではない、またはスペースである文字…言い換えれば、任意の文字。

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

(?s:.)
271
ephemient

うん、あなたは.を改行に一致させる必要があるだけです:

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