Trouver l'ensemble de la ligne qui contient le mot avec php expressions régulières
Je veux rechercher un mot "session" dans un texte. Mais je voudrais récupérer l'ensemble de la ligne où ce mot apparaît. Jusqu'à présent, je viens avec cela.
$pattern="[^\\n]*session[^\\n]*";
preg_match_all($pattern,$content, $matches, PREG_OFFSET_CAPTURE);
Mais j'obtiens une erreur "Unknown modificateur '*'". Toutes les idées comment faire une expression régulière?
OriginalL'auteur Borut Flis | 2013-02-03
Vous devez vous connecter pour publier un commentaire.
Votre expression régulière est manquant délimiteurs, par conséquent votre erreur:
Si je interpréter vos intentions correctement, vous essayez de faire correspondre zéro ou plus pas retours à la ligne, suivi de "session", suivi par zéro ou plus pas retours à la ligne.
Plus simple (potentiellement plus correct) modèle serait celui-ci:
Qui est, depuis le début d'une ligne (
^
) correspond à 0 ou plus de n'importe quel caractère (.*
), une limite de mot (\b
), le mot "session", un autre mot, une autre série de caractères, et la fin de la ligne ($
), de la correspondance sur plusieurs lignes (m
modificateur).Vous avons réinventé les ancrages (
^
et$
) avec[^\n]
qui est un peu non évidente, mais il a manqué les frontières de mot, qui n'est probablement pas souhaité que vous êtes correspondant à tout mot contient le mot "session". Qui est la vôtre pourrait correspondre à une ligne contenant "sessions" ou de "biens" ou "obsessions" ou "abcsessionxyz", où le mien ne l'a pas; si ce n'est pas désiré, vous pouvez supprimer le\b
's rendement/^.*session.*$/m
et nos motifs sont plus ou moins équivalentes.Voici une preuve de concept, trouver l'ensemble du milieu de la ligne qui contient le mot:
De sortie:
Votre modèle aurait trouvé la ligne "de sauter le mot obsessions mais".
Les limites de Word sont décrites ici, mais, fondamentalement, n'importe où entre deux personnages dont l'un est un caractère de mot (
[a-zA-Z0-9_]
) et l'un ne l'est pas. Il est intéressant de noter que nos modèles ne sont pas identiques; la vôtre match "blahsessionblah", où la mine ne sera pas.Mise à jour de ma réponse à démontrer pourquoi le mot-limites sont importantes.
OriginalL'auteur meagar