Regex : précédé d'un nombre impair de guillemets
Bonjour,
J'aimerais savoir s'il était possible, dans une regex, de faire une règle qui dirait "précédé d'un nombre impair de guillemets ?
$chaine = '"texte avant """" texte après"';
$pattern = '`"(.+?)"(?!")((?<!"")|(?<="""))`s';
print_r($m);
Ici, je voudrais que la dernière assertion (?
Réponses apportées à cette discussion
Je peux te proposer ceci :
$pattern = '#"([^"]+)"#';
Partant de là, tu ne captureras que ce qui se trouve entre des paires de guillemets, incluant éventuellement des chaines vides. Ainsi, si tu fais ceci :
<?php
$chaine = '"texte avant """"""""" texte après"';
$pattern = '#"([^"]+)"#';
$aTextes = array();
if(preg_match_all($pattern, $chaine, $sortie))
{
foreach($sortie[1] as $s)
{
if(!empty($s))
{
$aTextes[] = $s;
}
}
}
echo("<pre>\n");
var_dump($aTextes);
echo("</pre>\n");
Tu vas obtenir ceci :
array(2) {
[0]=>
string(12) "texte avant "
[1]=>
string(13) " texte après"
}
J'obtiens ce résultat quel que soit le nombre de guillemets orphelins entre les deux chaines. Maintenant, je ne sais pas si ça répond à ta question ?
Pas vraiment.
En fait, mon objectif est de capturer ce qui se trouve entre guillemets, et qui peut contenir des guillemets s'ils sont échapés avec des guillemets.
Donc on commence la capture sur un guillemet et on s'arrête au prochain guillemet non échappé (qui n'est pas doublé / présent en double).
La subtilité étant que ces guillemets échapés peuvent être soit au début, soit au milieu, soit à la fin et pas forcément orphelins.
Ha, effectivement... Il faudrait que je creuse davantage mais là, désolé, je manque de temps. Tu trouveras peut-être des pistes pratiques sur le site de lumadis