首页 >后端开发 >php教程 >如何在使用 PREG_OFFSET_CAPTURE 的 preg_match() 之后获取 UTF-8 字符串中的正确字符偏移量?

如何在使用 PREG_OFFSET_CAPTURE 的 preg_match() 之后获取 UTF-8 字符串中的正确字符偏移量?

Linda Hamilton
Linda Hamilton原创
2024-12-03 01:01:09977浏览

How to Get the Correct Character Offset in UTF-8 Strings After a preg_match() with PREG_OFFSET_CAPTURE?

使用 preg_match() 获取匹配前的多字节字符计数

问题:

执行时使用 preg_match() 与 UTF-8 编码字符串进行正则表达式匹配PREG_OFFSET_CAPTURE 参数,生成的偏移量以字节为单位计算,而不是字符数。在匹配多字节字符时,这可能会出现问题,因为它们的字节长度可能与其字符长度不同。

例如,使用以下代码来匹配 UTF-8 编码字符串中的“H”字符,结果偏移量为 2,即使字符“H”位于索引处1:

$str = "\xC2\xA1Hola!";
preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE);
echo $a_matches[0][1];

解决方案:

要获取正确的字符计数偏移量,请使用 mb_strlen() 确定匹配的子字符串的长度:

$str = "\xC2\xA1Hola!";
preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE);
echo mb_strlen(substr($str, 0, $a_matches[0][1]));

这将计算 UTF-8 字符的偏移量,提供正确的结果。

以上是如何在使用 PREG_OFFSET_CAPTURE 的 preg_match() 之后获取 UTF-8 字符串中的正确字符偏移量?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn