2016-02-17 1 views
-1

J'ai obtenu mon expression pour correspondre exactement à ce que je veux sur regex101.com, mais cela ne fonctionnera pas dans mon fichier php pour une raison quelconque.regex fonctionne dans testeur mais pas dans le fichier php

est ici l'expression de travail: Working Code

Voici ce que j'ai dans mon fichier PHP:

preg_match('/Comments:(.*(?=<img))/', $inbound->HtmlBody, $cust_comments); 

Quand je var_dump($cust_comments);, j'ai un tableau vide. Des recommandations?

+0

Il y a une raison pour laquelle nous disons aux gens d'utiliser un analyseur HTML au lieu d'une solution de regex cassée. – PeeHaa

+0

Vous pouvez également utiliser la correspondance non [gourmande] (http://www.regular-expressions.info/repeat.html#greedy) et [réinitialiser] (http://www.rexegg.com/regex-php.html# K) au lieu du groupe de capture. Voir cette démo: [''/Comments:\K.*?(?=

+0

Pour clarifier le problème de cette question déjà avoir une réponse ailleurs ... la question qui fournit la réponse est "Comment faire pour faire correspondre les caractères de nouvelle ligne ...", mais j'aurais dû savoir que c'était le problème afin de savoir que c'était ma réponse. Je ne savais pas que c'était les caractères de nouvelle ligne qui causaient le problème, donc je n'aurais pas pu savoir utiliser cette solution. – drumichael611

Répondre

0

Votre testdata contient linebreaks comme échappé \r\n Je suppose que dans votre $inbound->HtmlBody d'origine, les sauts de ligne sont linebreaks réels -. Qui ne se capturés par pas * sauf si vous utilisez un modificateur.

Essayez ceci:

preg_match('/Comments:(.*(?=<img))/s', $inbound->HtmlBody, $cust_comments);