Im trying to get the sentence which contain the link in the following text :
Referencement PG1 est spécialiste en référencement depuis 2004. Une recherche sur
Im trying to get the sentence which contain the link in the following text :
Referencement PG1 est spécialiste en référencement depuis 2004. Une recherche sur
Votre expression régulière correspond toujours à la première phrase car elle commence par une lettre majuscule. Vous devez commencer par \.
ou (?:^|[\.!?])
ou quelque chose, mais cela peut poser problème car la première phrase peut également être valide dans certaines circonstances. Est-il possible d'avoir plusieurs phrases avec ces liens? La question importante est de savoir ce qui définit une phrase.
Cela fonctionnera avec ce que vous avez, en plus de la première phrase après un p>
et une phrase au début de la chaîne :
preg_match('/
(?: # correspondre, mais ne pas capturer
^ # le début de la chaîne
|p>\s* # ou une balise p ouvrante ou fermante suivie de n'importe quel nombre d'espaces
|[\.!?] ) # ou ponctuation de phrase suivie d'un espace
( # capturer
[A-Z] # une lettre majuscule
.*? # suivie de n'importe quels caractères jusqu'à
<\/a> # une balise d'ancre fermante
.*? # suivie de n'importe quels caractères jusqu'à
[.?!]) # ponctuation de fin
/x', $item, $matches);
Cela s'appelle "greedy matching". Cela signifie que les moteurs regex correspondent généralement à TOUS les caractères pour lesquels l'expression régulière est valide. Dans votre exemple, vous devez limiter le DÉBUT de l'expression régulière afin qu'elle ne corresponde pas de manière gourmande à différentes phrases.
Essayez ceci:
[^.!?]*<\s*a[^>]+>([^<]*)[^.?!]*[.?!]
Cela devrait correspondre à toute la phrase et rien de plus.
J'espère que cela vous aidera.
Vous voudrez peut-être vous intéresser à un analyseur DOM à la place :
Par exemple : http://simplehtmldom.sourceforge.net/
Exemple provenant de leur site :
// Créer un DOM à partir d'une URL ou d'un fichier
$html = file_get_html('http://www.google.com/');
// Trouver toutes les images
foreach($html->find('img') as $element)
echo $element->src . '';
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.