正则表达式转换任何超过3个字符或更少的字来关键词V
-
21-09-2019 - |
题
我想的单词的任何发生转换以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
不隶属于 StackOverflow