REGEXP 将任意 3 个字符或更少的单词转换为单词 VVV
我正在尝试将任何出现的包含 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你的模式没有正确检测或分组事物。
使用
\w
表示单词字符和标准括号而不是方括号,并且您不会在替换中评估 PHP 代码,您只是引用捕获的文本段,因此不需要e
标志:或者,将
preg_replace
与 unicode 标志一起使用:如果您需要满足阿拉伯语和从右到左的字符,则需要使用 unicode 字符属性而不是
\w
和\b
(\w
并不匹配所有语言的字母,\b
仅匹配在\w\W
和\W\w
之间 - 它们都是损坏的非拉丁语言。)尝试这个:(
再次因为我不知道。我是否需要编码<或不需要)
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 thee
flag:Alternatively, use
preg_replace
with the unicode flag: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:
(and again cos I can't tell whether I need to encode < or not)
这应该符合你想要的?
This should match what you want?