2017-05-04 6 views
1
<?php 
echo preg_replace('/(?<!\pL)(.){1,4}(?!\pL)/','%','Pamiętam i tak będę z tobą jestem jestem i czuweam dfgd....'); 
?> 

Comment le faire, si à jestem volonté d'avoir de 1 à 4 caractères, à ne pas sortie ce?opérateur Boundary en PHP regex jusqu'à quatre occurrences du caractère

((?<!\pL)(?!\pL)){1,4} 

Je veux avoir tel résultat:

Pamiętam jestem jestem czuweam dfgd.... 
+0

Il doit remplacer tous les mots qui ne sont pas des mots mais qui ont de 1 à 4 caractères. Je veux avoir ceci: exemple .go. exemple sur l'exemple% exemple, car .go. avoir 4 caractères. – Neutral

+0

Voir ma réponse ci-dessous - ça marche? Si oui, veuillez accepter. Sinon, ajoutez des détails * au corps de la question *. –

+0

Merci, alors vous plutôt je peux gérer seul plus tard probablement. – Neutral

Répondre

0

Vous peut utiliser

$s = 'Pamiętam i tak będę z tobą jestem jestem i czuweam dfgd.... Teraz idę do kina. A teraz nie idę.'; 
echo preg_replace('/(?<!\S)\S{1,4}(?!\S)/u','%', $s); 
// => Pamiętam % % % % % jestem jestem % czuweam dfgd.... Teraz % % kina. % teraz % % 

détails Motif:

  • (?<!\S) - il doit y avoir un espace; symbole ou début de la chaîne immédiatement avant ...
  • \S{1,4}-1 à 4 caractères non-blancs
  • (?!\S) - immédiatement après les 1-4 caractères, il doit y avoir un symbole espace ou fin de chaîne.

Voir le PHP demo.

Ne pas oublier un modificateur /u UNICODE puisque vous travaillez avec des chaînes Unicode.

+0

dfgd .... avoir 8 caractères, je veux avoir, de ne pas changer. Maintenant comptez 4 caractères et changez. Je veux dfgd .... dans son ensemble, pas% ..... – Neutral

+0

@Neutral: S'il vous plaît vérifier à nouveau. –