首頁 >後端開發 >php教程 >如何在使用 PREG_OFFSET_CAPTURE 的 preg_match() 之後取得 UTF-8 字串中的正確字元偏移量?

如何在使用 PREG_OFFSET_CAPTURE 的 preg_match() 之後取得 UTF-8 字串中的正確字元偏移量?

Linda Hamilton
Linda Hamilton原創
2024-12-03 01:01:091017瀏覽

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