je besoin de conseils sur ce boutRegEx: mise en correspondance et en remplaçant ABC dans "AB ABC D"
$text = preg_replace('|(A.*)?A(.*)C|', '$1foo$2bar', $text);
Cela correspond à ABC "AB ABC D", et le remplacer par "AB fooBbar D"; comme vous pouvez le voir, cela correspond également à la partie "AB" au début, que je dois répéter dans la chaîne de remplacement avec 1 $, pour ne pas la perdre.
Est-ce la meilleure façon d'obtenir un tel résultat?
Y at-il un drapeau X tel que
$text = preg_replace('|A(.*)C|X', 'foo$1bar', $text);
produit le même résultat?
J'espère que je suis clair
Merci!
EDIT: Considérez A, B, C sous forme de chaînes atomiques de caractères arbitraires, ils peuvent contenir des espaces blancs et
En outre, l'exemple présenté est en buggy fait, car il correspond à la deuxième « ABC » dans "ABC ABC".
EDIT2: Je suis désolé, j'ai probablement très mal expliqué le problème. Le point est que je veux correspondre quel que soit entre deux A, la chaîne C, de sorte qu'il n'y a pas une sous-chaîne dans le match
Encore une fois merci
La prochaine fois, vous devriez trouver un exemple dans le monde réel. :-) Les exemples "ABC" inventés ne sont pas idéaux (comme vous l'avez vu). – Tomalak
Quelle devrait être la sortie désirée pour "A AABCC C"? –
@NoWhereMan: Pouvez-vous expliquer pourquoi un simple preg_replace ('| A (B) C |', 'foo $ 1bar', $ text) ne fonctionne pas? –