web-dev-qa-db-ja.com

PHP preg_match(。*)過去の改行に一致しない

LONGTEXT列にこのデータがあります(したがって、改行は保持されます)。

Paragraph one
Paragraph two
Paragraph three
Paragraph four

段落1〜3に一致させようとしています。このコードを使用しています。

preg_match('/Para(.*)three/', $row['file'], $m);

これは何も返しません。段落の最初の行内だけで作業しようとすると、次のように一致します:

preg_match('/Para(.*)one/', $row['file'], $m);

その後、コードが機能し、適切な文字列が返されます。ここで何が間違っていますか?

24
Norse

s修飾子を使用します。

preg_match('/Para(.*)three/s', $row['file'], $m);

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

53

複数行修飾子 を追加します。

例えば:

preg_match('/Para(.*)three/m', $row['file'], $m)
11
temporalslide

正規表現をドットオール(最後に追加の 's'パラメーター)に設定してみてください。そうすると、改行が含まれます。

preg_match('/Para(.*)three/s', $row['file'], $m);
4
Jen

開始時に/が気に入らない場合、および T-Regx を使用します

$m = Pattern::of('Para(.*)three')->match($row['file'])->first();
0
Danon