WordVVV için herhangi bir 3 karakter veya daha az kelime dönüştürmek için regexp

2 Cevap php

I am trying to convert any occurrence of a word with 3 chars or less to the same word with the string VVV attached to it.
Example: for -> forVVV
I am using none Latin chars (UTF8), hence the MB.
What I have is:

$pattern='\b[.{1,6}]\b';
$text=mb_ereg_replace($pattern,'\0VVV',$text,'me');

Ne eksik?

Burada bir vaka çalışması hiçbir şey yakalar, bkz olduğunu:

$text="א אב אבי אביהו מדינה שול של";
$pattern='/\b.{1,6}\b/um';
$text=preg_replace($pattern,'hhh',$text);
echo $text;

2 Cevap

Sen desen tespit veya doğru şeyler gruplandırma değil değilsin.

\w kelime karakter ve yerine köşeli parantez standart parantez için kullanın ve değiştirme PHP kodunu değerlendirmek değil, sadece yakalanan metin bölümlerine bahsediyorsan, yani {[gerekmez (1)]} bayrak:

$pattern = '\b(\w{1,3})\b';
$text = mb_ereg_replace($pattern, '\0VVV', $text, 'm');

Alternatif olarak, unicode bayrağı ile preg_replace kullanın:

$text = preg_replace('/\b\w{1,3}\b/um', '\0VVV', $text)

Eğer Arapça ve sağdan sola karakterleri karşılamak için gerekiyorsa, (\w değil bizim için yerine \w ve \b içinde unicode karakter özelliklerini gerekir maçı tüm dillerde gelen mektuplar, ve \b sadece \w\W ve \W\w arasında eşleşir -.. ki her ikisi de kırık wrt latin olmayan dilleri)

Bu intead deneyin:

$text = preg_replace('/(?

(Ve ben kodlamak

$text = preg_replace('/(?<!\PL)(\pL{1,3})(?:\PL)/um', '\1VVV', $text);

Bu ne istediğinizi aynı olmalıdır?

\b(?<Match>\w{1,3})\b