REGEX per convertire eventuali 3 caratteri o meno parola per parola V
-
21-09-2019 - |
Domanda
Sto cercando di convertire qualsiasi occorrenza di una parola con 3 caratteri o meno alla stessa parola con il VVV filo attaccato ad esso.
Esempio: per -> forVVV
Sto usando nessuno caratteri latini (UTF8), da cui il MB.
Quello che ho è:
$pattern='\b[.{1,6}]\b';
$text=mb_ereg_replace($pattern,'\0VVV',$text,'me');
Che cosa mi manca?
Ecco un caso di studio, vedere la cattura nulla:
$text="א אב אבי אביהו מדינה שול של";
$pattern='/\b.{1,6}\b/um';
$text=preg_replace($pattern,'hhh',$text);
echo $text;
Soluzione
Sei modello non sta rilevando o raggruppare le cose a posto.
Utilizzare \w
per Word-personaggi e parentesi standard invece di parentesi quadre, e non sei valutando codice PHP nella sostituzione, si sta semplicemente facendo riferimento a segmenti di testo acquisiti, quindi non hanno bisogno bandiera e
:
$pattern = '\b(\w{1,3})\b';
$text = mb_ereg_replace($pattern, '\0VVV', $text, 'm');
In alternativa, l'uso preg_replace
con la bandiera unicode:
$text = preg_replace('/\b\w{1,3}\b/um', '\0VVV', $text)
Se è necessario per soddisfare i caratteri arabi e da destra a sinistra, è necessario ci proprietà dei caratteri Unicode invece di \w
e \b
(\w
non corrisponde lettere di tutte le lingue, e \b
corrisponde solo tra \w\W
e \W\w
- che sono entrambi wRT rotto. lingue non latine.)
Prova questo intead:
$text = preg_replace('/(?
(and again cos I can't tell whether I need to encode < or not)
$text = preg_replace('/(?<!\PL)(\pL{1,3})(?:\PL)/um', '\1VVV', $text);
Altri suggerimenti
Questo dovrebbe corrispondere a ciò che si vuole?
\b(?<Match>\w{1,3})\b