web-dev-qa-db-fra.com

PHP preg_match (. *) ne correspond pas aux sauts de ligne passés

J'ai ces données dans une colonne LONGTEXT (les sauts de ligne sont donc conservés):

Paragraph one
Paragraph two
Paragraph three
Paragraph four

J'essaie de faire correspondre les paragraphes 1 à 3. J'utilise ce code:

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

Cela ne retourne rien. Si j'essaie de travailler juste dans la première ligne du paragraphe, en faisant correspondre:

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

Ensuite, le code fonctionne et la chaîne appropriée est renvoyée. Qu'est-ce que je fais mal ici?

24
Norse

Utilisez le modificateur s.

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

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

51

Ajoutez le modificateur multiligne .

Par exemple:

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

Essayez de définir regex sur dot-all (le paramètre extra 's à la fin), de manière à inclure les sauts de ligne:

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

Si vous n'aimez pas / au début et et, utilisez T-Regx

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