【发布时间】:2014-06-27 16:34:57
【问题描述】:
我有一些印度语言编码的数据。我想删除只有一两个字符的部分,例如这是两个字符:
ಎನ್
但它们是多字节的
我尝试使用正则表达式匹配这些:
'~\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},它会匹配吗? -
似乎在Regex101 中工作,想知道您的PHP 中是否存在编码问题?
-
没有。出于某种原因,我只剩下单词的前 1-2 个字符。
-
我这里只有一场比赛:regex101.com/r/wQ5cQ6#pcre
-
我认为问题可能与使用 \b (单词边界)有关。它似乎被忽略了。
标签: php regex unicode preg-match