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;
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top