在php.net preg_match页面中,它说
注意: 使用offset不等于将substr($ subject,$ offset)传递给> preg_match()来代替主题字符串,因为pattern可以包含>断言,例如^,$或(?< = x)。
这是否意味着如果模式中存在断言,偏移选项将被忽略。 断言如何影响主题字符串
答案 0 :(得分:2)
不,不忽略偏移量,但这些断言适用于整个字符串,而不是从偏移量开始的字符串。因此,根据您是否传递子字符串或使用offset参数,您可以获得不同的结果。特别是,^
匹配字符串的开头,而不是偏移位置。
引用行下方的示例清楚地表明了这一点:
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
这没有匹配,因为即使def
在字符串中的偏移量为3,它也不在字符串的开头。
如果忽略了偏移量,您可以使用类似/^abc/
的模式,它会匹配。但这也不会匹配,因为abc
在偏移之前。