我在utf-8字符串中有一个字符的字节位置(通过preg_match和PREG_OFFSET_CAPTURE得到它)。但我需要角色位置。我怎么能得到它?
我有这样的事情:
$x = 'öüä nice world';
preg_match('/nice/u', $x, $m, PREG_OFFSET_CAPTURE);
var_dump($m);
导致:
array(1) {
[0]=>
array(2) {
[0]=>
string(4) "nice"
[1]=>
int(7)
}
}
所以我的字节位置是7。
但是我需要4的字符位置。有没有办法将字节位置转换为字符位置?
此示例高度简化。我不能选择使用mb_strpos
或类似的东西来找到“好”这个词的位置。我需要正则表达式,实际上我需要preg_match_all
而不是preg_match
。所以我认为转换位置对我来说是最好的方式。
答案 0 :(得分:1)
如前所述,您可以基于similar question:
中的一个示例构建$x = 'öüä nice öüä nice öüä nice öüä nice öüä nice';
$r = preg_match_all('/nice/u', $x, $m, PREG_OFFSET_CAPTURE);
for($i = 0; $i < $r; $i++) {
var_dump(mb_strlen(substr($x, 0, $m[0][$i][1])));
}
<强>结果强>:
int(4)
int(13)
int(22)
int(31)
int(40)
这会显示每个角色的位置,其中&#34; 很好&#34;会马上跟着......