2015-04-07 1 views
1

Je possède ce code PHP:Recherche et remplacer par des lettres regex en dehors des balises html et '

$subject = "word1 <a skip this word2 >w'aot'rd2 again</a> word3"; 
$pattern = "~<[^>]*>|'[^>]*'(*SKIP)(*F)|o~"; 
$replace = 'O'; 
$result = preg_replace($pattern, $replace, $subject); 

echo $result; 

Il est fonctionne très bien quand je remplacerai « o » pour « O » en dehors des balises HTML, mais je recherche don ne remplacez pas le "o" à l'intérieur de '' aussi bien.

Et j'ai besoin de remplacer tableau de lettres, comme "r" pour "R" et "a" pour "A".

Résultat: "wOrD1 <a skip this word2 >w'aot'rD2 again</a> wOrD3" Remplacer "o" pour "O" et "d" pour "D", en dehors des balises html et en dehors de ''.

+0

ce qui est le résultat attendu que vous cherchez? –

+0

je recherche ceci: "WORD1 w'aot'rD2 again MOT3" Remplacer o O et d D, en dehors des balises html et à l'extérieur '' – user3341848

+1

Vous devez regrouper le "skip fail" partie: '(? <[^>] *> | '[^>] *') (* SKIP) (* F) | o' https://regex101.com/r/lY8pU3/1. Vous pouvez également utiliser le modificateur 'x' pour ajouter de l'espace et commenter [démo] (https://regex101.com/r/lY8pU3/2) – HamZa

Répondre

2

Voici le PHP code tourner uniquement « o » et « d » majuscules:

$str = "word1 <a skip this word2 >w'aot'rd2 'word5' word6 'word7'</a> word3"; 
$re = "~(?:<[^>]*>|'[^']*')(*SKIP)(*F)|([od])~"; 
$str = preg_replace_callback(
    $re, 
    function ($matches) { 
     return strtoupper($matches[1]); 
    }, 
    $str 
); 
echo $str; 

Si vous souhaitez ajouter d'autres, il suffit de définir votre propre gamme. Dites, [a-z] pour tous les caractères anglais.

Sortie:

wOrD1 <a skip this word2 >w'aot'rD2 'word5' wOrD6 'word7'</a> wOrD3 
+0

@Hamza: Merci, je n'ai pas remarqué lors de la modification de mon ancienne réponse :) –

+0

Bienvenue. Pourriez-vous changer le lien de démonstration? Évitez également l'utilisation de raccourcisseur de lien. – HamZa

+1

@HamZa: Modifié. En fait, je pensais que je ne pouvais utiliser que des liens raccourcis sur TutorialsPoint. Je vois que j'avais tort. –