我有$string = "hello world, world!";
,我只需匹配第一个 world
,所以我也有偏移量。它从第6个角色开始。 preg_match()
有五个参数:string pattern ,string subject ,引用数组匹配,int flags和int offset 。
我的模式是:$pattern = "/^world/";
如果我做preg_match($pattern, $string, $string_match, 0, 6)
,基本上我希望这是有效的,因为“锚”将检查我的字符串的第6个字母,因为我设置了偏移量。 但不是!它不起作用。哦!
一个简单的修复,而不是我设置preg_match()
函数的偏移量,我使用substr()
而不是$string
,就像它:{{1} }。
是否可以修复我的第一个代码以正确使用带preg_match($pattern, substr($string, 6), $string_match)
偏移量的锚点?或者它是唯一的解决方案?
答案 0 :(得分:3)
你正在使用错误的锚点;要使用偏移量,你需要\G
,最后一个匹配位置锚点
$string = 'hello world, world!';
var_dump(preg_match('/\Gworld/', $string, $matches, 0, 6)); // int(1)
有趣的是,documentation表示不支持\G
,但从4.3.3开始,它肯定是supported。