Php preg_按长度匹配多字节字符

Php preg_按长度匹配多字节字符,php,regex,unicode,preg-match,Php,Regex,Unicode,Preg Match,我有一些印度语言编码的数据。我想删除只有一个或两个字符的部分,例如,这是两个字符: ಎನ್ 但它们是多字节的 我尝试使用正则表达式匹配这些: '~\b[^ ]{1,2}\b~u' 但它不起作用。有什么想法吗 根据所选答案,中的解决方案将使用mb_ereg函数。这对我很有用: mb_regex_encoding( 'UTF-8' ); setlocale( LC_CTYPE, 'en_US.UTF-8' ); $str = 'ಆರ್‌ ವೆಂಕಟಲಕ್ಷ್ಮಿ ಎಸ್‌ ಎನ್‌ ಎನ್‌ ಪ

我有一些印度语言编码的数据。我想删除只有一个或两个字符的部分,例如,这是两个字符:

ಎನ್
但它们是多字节的

我尝试使用正则表达式匹配这些:

'~\b[^ ]{1,2}\b~u'
但它不起作用。有什么想法吗

根据所选答案,中的解决方案将使用mb_ereg函数。这对我很有用:

mb_regex_encoding( 'UTF-8' );
setlocale( LC_CTYPE, 'en_US.UTF-8' );
$str = 'ಆರ್‌ ವೆಂಕಟಲಕ್ಷ್ಮಿ ಎಸ್‌ ಎನ್‌ ಎನ್‌ ಪದ್ಮಾವತಿ ಎನ್';
echo $str . "\n";
echo mb_ereg_replace( '\b[^\s]{2,4}\b', ' @ ', $str );
echo "\n";
结果:

 @ ‌ ವೆಂಕಟಲಕ್ಷ್ಮಿ  @ ‌  @ ‌  @ ‌ ಪದ್ಮಾವತಿ  @

这不适用于preg函数。

使用多字节安全函数和。(我不认为第一个是强制性的。也可以尝试不使用,看看这是否足够。)

那么如果您使用
{4}
,它将匹配?似乎在,不知您的PHP中是否存在编码问题?没有。出于某种原因,我只保留了单词的前1-2个字符。我在这里只找到一个匹配项:我认为问题可能与\b(单词边界)的使用有关。它似乎被忽略了。@AmalMurali我在preg_match手册页面上没有看到任何关于多字节支持的内容。而且没有多字节安全的preg_*变体。(至少没有一个是以mb_preg_*开头的)你多久会因为给出正确答案而被否决。我知道这种感觉。@KohjahBreese不要紧。很乐意帮忙。那么告诉我们,mb_regex_encoding()函数必须有什么,或者可以省略它吗?如果我省略mb_regex_编码('UTF-8');函数,我得到了一个不想要的结果。所以这是必需的。谢谢你的勤奋,否则可能解决不了这个问题。到知识库:)