按长度preg_match多字节字符

时间:2014-05-09 20:02:43

标签: 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 = 'ಆರ್‌ ವೆಂಕಟಲಕ್ಷ್ಮಿ ಎಸ್‌ ಎನ್‌ ಎನ್‌ ಪದ್ಮಾವತಿ ಎನ್';
echo $str . "\n";
echo mb_ereg_replace( '\b[^\s]{2,4}\b', ' @ ', $str );
echo "\n";

结果:

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

这不适用于preg函数。

1 个答案:

答案 0 :(得分:0)

使用多字节安全功能mb_regex_encoding()mb_ereg_replace()。 (我不相信第一个是强制性的。也可以尝试不用,看看是否足够。)