J'essaie de faire correspondre des chaînes entre guillemets dans un morceau de texte et de permettre des citations échappées à l'intérieur de celui-ci. J'ai essayé cette expression régulière dans un testeur en ligne, et cela fonctionne parfaitement. Cependant, quand je l'essaie dans preg_match_all, il échoue à la première chaîne échappée.expression regex pour la chaîne entre guillemets échappée ne fonctionnera pas dans preg_match_all de php
Voici le code:
$parStr = 'title="My Little Website"
year="2007"
description="Basic website with ..."
tech="PHP, mySQL"
link="<a href=\"http://test.com\">test.com</a>"
';
$matches = array();
preg_match_all('/(\w+)\s*=\s*"(([^\\"]*(\\.)?)*)"/', $parStr, $matches, PREG_SET_ORDER); // Match[4][0] is 'link="<a href=\"'
Il échoue sur le dernier match, correspondant seulement jusqu'à la première citation échappé. Lorsque j'essaie cette expression au http://www.regexplanet.com/simple/index.html, cela fonctionne parfaitement.
La partie pertinente de l'expression rationnelle est
"(([^\\"]*(\\.)?)*)"
qui devrait manger tout le texte menant à une citation échappé ou une citation, puis en mangeant un devis échappé en option, de ce procédé est répété 0 fois ou plus , jusqu'à ce qu'une citation non échappée soit trouvée, dans laquelle la correspondance est complète.
Pourquoi cela ne fonctionne-t-il pas en php? Pourquoi cela ne fonctionne-t-il pas et comment devrait-il être réparé?
dans $ parStr, qu'essayez-vous de trouver? – ghostdog74