[RESOLU] Regex tout sauf un mot

Eléphant du PHP | 385 Messages

29 déc. 2015, 12:51

Bonjour à tous,

Je sais que cela a déjà était évoqué mais cela ne fonctionne pas pour moi j'en appelle à votre générosité :)
j'ai cette expressions régulière

Code : Tout sélectionner

(<[a-zA-Z]+.*>)([a-zA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ]+.*)(</[a-zA-Z]+>)
qui va me capter les balise et je peux ainsi modifier le contenu seul problème j'ai des balises script par exemple je souhaiterai donc ne pas les matcher en ne gardant qu'une seul expression régulière, mais les assertion pour un test avec

Code : Tout sélectionner

(?!script)
et j'ai trois lignes

Code : Tout sélectionner

script 2 test2 http
dans notepad pour tester je fais que je remplace cela par test mais voilà le résultat

Code : Tout sélectionner

stestctestrtestitestptestttest test2test testttesteteststestttest2test testhtestttestttestptest
il va donc insérer test partout sauf avant s, si vous pouviez m'expliquer cela serai sympa merci à vous.

ViPHP
ViPHP | 928 Messages

15 janv. 2016, 04:17

Salut,
Je ne sais pas si c'est possible en regexp, mais tu peux clairement le faire avec preg_match_all(). Tu récupères tout ce qui match, et ensuite tu filtres avec une condition.

Par exemple :
preg_match_all('#(<[a-zA-Z]+.*>)([a-zA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ]+.*)(</[a-zA-Z]+>)#', $taChaineDeCaracteres, $m);
for ($i = 0, $total = count($m[0]); $i < $total; $i++) {
   // Si balise script
   if ($m[1][$i] == 'script') {

   }
   else {

   }
}

Mammouth du PHP | 1967 Messages

15 janv. 2016, 09:30

Et pour ton remplacement, montre nous le code que tu utilise, il vaut mieux utiliser str_replace que strtr
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 385 Messages

15 janv. 2016, 09:46

Merci de vos réponses, je fais cela pour matcher des fichier php mais j'utilise surtout notepad pour le remplacement avec regex pour sélectionner un dossier et ces sous dossier afin de gagner du temps, j'ai finalement décidé de matcher les balises spécifiquement label un exemple si cela peut aider d'autres personnes

Code : Tout sélectionner

[^"'](<td.*>)([a-zA-ZáàâäãåçéèêëíìîïñóòôöõúùûüýÿæœÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝŸÆŒ\s][^\?<...]+)(</td>)
avec une expression comme celle là je match les balises td qui sont pas dans des echos ou balsie php, merci pour votre aide.