【发布时间】:2023-04-08 12:24:01
【问题描述】:
PHP 的 strlen() 函数不支持 UTF-8,因此我想将 strlen() 的每个用法与其支持 UTF-8 的对应项交换:mb_strlen()。但是,mb_strlen() 需要一个额外的参数:
$length = strlen($someString);
$length = mb_strlen($someString, 'UTF-8');
如果没有第二个参数,一个简单的 Perl 正则表达式将处理交换:
$ find . -name '*' -print0 | xargs -0 perl -pi -e 's/strlen/mb_strlen/g'
我尝试使用捕获组和反向引用,但 VIM 样式的语法要么不支持(在最近的 Ubuntu 上),要么我无法弄清楚。我已经尝试了几种变体但没有成功:
$ find . -name '*' -print0 | xargs -0 perl -pi -e 's/strlen\((\.*)\)/mb_strlen\($1, "UTF-8"\)/g'
此外,strlen() 内部可能有诸如 trim() 之类的函数,所以我必须使这个贪婪,但我不确定贪婪运算符应该准确地去哪里。这个正则应该怎么写?
【问题讨论】: