REGEXP 将任意 3 个字符或更少的单词转换为单词 VVV

发布于 2024-08-03 23:12:54 字数 406 浏览 2 评论 0原文

我正在尝试将任何出现的包含 3 个或更少字符的单词转换为附加有字符串 VVV 的同一个单词。
示例:对于 ->对于VVV
我没有使用拉丁字符 (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;

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

What am I missing?

Here is a case study, see it catches nothing:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

活泼老夫 2024-08-10 23:12:54

你的模式没有正确检测或分组事物。

使用 \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 之间 - 它们都是损坏的非拉丁语言。)

尝试这个:(

$text = preg_replace('/(?

再次因为我不知道。我是否需要编码<或不需要)

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

You're pattern's not detecting or grouping things right.

Use \w for word-characters and standard parenthesis instead of square brackets, and you're not evaluating PHP code in the replacement, you're simply referring to captured text segments, so don't need the e flag:

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

Alternatively, use preg_replace with the unicode flag:

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

If you need to cater for arabic and right-to-left characters, you need to us unicode character properties instead of \w and \b (\w doesn't match letters from all languages, and \b only matches between \w\W and \W\w - which are both broken wrt. non-latin languages.)

Try this intead:

$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);
寂寞陪衬 2024-08-10 23:12:54

这应该符合你想要的?

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

This should match what you want?

\b(?<Match>\w{1,3})\b
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文