我试图将3个或更少字符的任何单词转换为附加了字符串VVV的同一个单词。
示例:for - > 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;
答案 0 :(得分:0)
你的模式没有正确地检测或分组。
将\w
用于单词字符和标准括号而不是方括号,并且您不会在替换中评估PHP代码,而只是引用捕获的文本段,因此不需要{ {1}}标志:
e
或者,将$pattern = '\b(\w{1,3})\b';
$text = mb_ereg_replace($pattern, '\0VVV', $text, 'm');
与unicode标志一起使用:
preg_replace
如果你需要迎合阿拉伯语和从右到左的字符,你需要使用unicode字符属性而不是$text = preg_replace('/\b\w{1,3}\b/um', '\0VVV', $text)
和\w
(\b
与来自的字母不匹配所有语言和\w
仅在\b
和\w\W
之间匹配 - 这两种语言都是非拉丁语言。)
试试这个内容:
\W\w
$text = preg_replace('/(?
(and again cos I can't tell whether I need to encode < or not)
答案 1 :(得分:0)
这应该符合您的要求吗?
\b(?<Match>\w{1,3})\b