我有 UTF-8 字符串,我想搜索所有出现的img_(\d+)
. 我试过原版的
$pattern = '/img_(\d+)/u';
preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE);
但它给了我错误的模式偏移。
我也尝试过:
mb_internal_encoding('UTF-8');
$pattern = 'img_(\d+)';
mb_ereg_search_init($content, $pattern);
$matches = [];
while ($result = mb_ereg_search_regs()) {
$matches[] = [
'match' => $result[0],
'offset' => mb_ereg_search_getpos() - mb_strlen($result[0]),
];
}
但它给了我与 相同的结果preg_match_all
。
但是,当我使用以下命令手动运行搜索时:
$pos = mb_strpos($content, "img_1", 0);
我得到了正确的偏移量。
示例代码:
$str = "příliš žluťoučký img_1 kůn úpěl ďábelské ódy";
$pattern = '/img_(\d+)/u';
preg_match_all($pattern, $str, $matches, PREG_OFFSET_CAPTURE);
print_r($matches); //gives 24 (wrong)
echo mb_strpos($str, "img_1", 0); //gives 17 (correct)
如何解决这个问题?