我想的单词的任何发生转换以3个字符或更少,以与连接到它的字符串VVV相同的字。结果, 例如: - > forVVV结果 我使用无拉丁字符(UTF8),因此MB。结果 我所拥有的是:

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

我是什么失踪?

下面是一个案例研究,见它捕获没什么:

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

解决方案

您是图案不是检测或分组的事情吧。

使用的文字字符和标准括号而不是方括号\w,而你不是在更换评估PHP代码,你只是指捕获文本段,所以不需要e标志:

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

可替换地,使用preg_replace与unicode的标志:

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

如果您需要,以满足阿拉伯和从右到左的字符,你需要给我们Unicode字符属性,而不是\w\b\w不从所有的语言相匹配的字母,并\b只有\w\W\W\w之间的匹配 - 这两者都是破碎WRT。非拉丁语言)。

试试这个这一翻译:

$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);

其他提示

这应该与你想要什么?

\b(?<Match>\w{1,3})\b
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top