使用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中文網其他相關文章!