Une recherche avec un preg_replace

WRInaute accro
Hello,

J'ai encore un petit soucis avec les exepressions régulières:

Code:
preg_replacek('`\[BALISE\](?:\\r\\n)?([^\r\n\t]{1}((?:(?!(?:p>|</p)).)*)[^\r\n\t]{1})(?:\\r\\n)?\[/BALISE\]`isU', '<span>$1</span>', $texte);

C'est actuellement ce que j'ai.
La je peux donc avoir ces différents cas:
[BALISE]texte[/BALISE]
[BALISE]
text
[/BALISE]
[BALISE]
texte
texte
[/BALISE]
etc..
Le problème que j'ai c'est de la manière dont je l'ai fais je suis obligé d'avoir au moins 2 caractères...et oui car j'autorise un retour à la ligne après la balise [BALISE] et avant la balise [/BALISE], mais un seul. Et ensuite j'oblige à avoir au moins un caractères, puis ce que je veux, puis encore avoir un caractères pour ne pas tomber dans ce genre de situation:

[BALISE]
(plusieurs espaces)
texte
[/BALISE]

Voila.
Je ne sais pas s'il existe une autre manière de faire, mais si jamais vous avez une idée et 2 minutes pour vous prendre la tête ;) merci.
 
WRInaute discret
thierry8 a dit:
Code:
preg_replacek('`\[BALISE\](?:\\r\\n)?([^\r\n\t]{1}((?:(?!(?:p>|</p)).)*)[^\r\n\t]{1})(?:\\r\\n)?\[/BALISE\]`isU', '<span>$1</span>', $texte);

8O

thierry8 a dit:
pour ne pas tomber dans ce genre de situation:

[BALISE]
(plusieurs espaces)
texte
[/BALISE]

Si je comprends bien ta démarche, tu valide tout ce qui est conforme et à la fin tu détruiras les [BALISE]...[/BALISE] restantes?

thierry8 a dit:
Je ne sais pas s'il existe une autre manière de faire

c'est difficile à dire lorsque un grand nombre de paramètres du problème sont inconnus... t'ai-je déjà présenté ma grande copine preg_match_all ?

Tisha
 
WRInaute accro
Tisha a dit:
thierry8 a dit:
Code:
preg_replacek('`\[BALISE\](?:\\r\\n)?([^\r\n\t]{1}((?:(?!(?:p>|</p)).)*)[^\r\n\t]{1})(?:\\r\\n)?\[/BALISE\]`isU', '<span>$1</span>', $texte);

8O
Est-ce aussi déroutant que cela ?

Tisha a dit:
thierry8 a dit:
pour ne pas tomber dans ce genre de situation:

[BALISE]
(plusieurs espaces)
texte
[/BALISE]

Si je comprends bien ta démarche, tu valide tout ce qui est conforme et à la fin tu détruiras les [BALISE]...[/BALISE] restantes?
euh..en fait comme dans l'exemple (je vais avoir du mal à expliquer mieux) je prends tout ce qui ce trouve entre ces balises, mais je n'autorise qu'un seul saut de ligne après la balise [BALISE] et un avant la balise [/BALISE] de manière à optenir une présentation correcte, simplement.

Tisha a dit:
thierry8 a dit:
Je ne sais pas s'il existe une autre manière de faire

c'est difficile à dire lorsque un grand nombre de paramètres du problème sont inconnus... t'ai-je déjà présenté ma grande copine preg_match_all ?

Tisha
En fait je n'utilise pas vraiment preg_replace() mais un preg_replace_callback(). Mais pour cette exemple je me suis basé sur un truc plus simple. J'ai regardé la doc. pour le preg_replace_all(), le seul intéret à qu'il analyse tout et ensuite l'on récupère un tableau, c'est bien cela ? dans ce cas le callback fait pour moi "la même" chose sauf un part un et le traitement tout de suite.

En fait ce que je voulais surtout savoir c'est si syntaxiquement ma regex et correcte ? du fait ([^\r\n\t]{1}((?:(?!(?:p>|</p)).)*)[^\r\n\t]{1})

Je cherche à savoir si ça [^\r\n\t]{1} puis ça ((?:(?!(?:p>|</p)).)*) (sans en tenir compte, ça pourrait être simplement .*) puis à nouveau ça [^\r\n\t]{1} ça semble correcte pour n'avoir qu'un seul saut de ligne (au max, donc non obligatoire) avant et après...sachant que je peux en avoir plusieurs entre..

J'espère que ce peu d'iinformation pourra aider :?
 
WRInaute discret
T'as essayé de tester tes regex dans des outils de test de regex ? Y'en a quelque un en ligne ou en logiciel. Perso j'utilise un freeware (the regex coach). Ca me permet de voir rapidement les erreurs et de faire des tests de simplification.
 
Discussions similaires
Haut