REGEX将任何3个字符或更少的单词转换为单词V.

时间:2009-09-03 14:30:00

标签: php regex multibyte-functions

我试图将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;

2 个答案:

答案 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