2017-02-13 3 views
-1

в странице preg_match php.net, он говорит

Примечание: Использование смещения не эквивалентно переходу SubStr ($ тему, $ офсет) к> preg_match() вместо строка subject, потому что шаблон может содержать> утверждения, такие как ^, $ или (? < = x).

php.net

Означает ли это смещение опция будет игнорироваться, если есть утверждения в шаблоне. Как точно утверждения влияют на строки объекта

ответ

2

Нет, смещение не игнорируется, но эти утверждения относятся ко всей строке, а не к строке, начинающейся со смещения. Таким образом, вы можете получить другой результат в зависимости от того, передаете ли вы подстроку или используете аргумент offset. В частности, ^ соответствует началу строки, а не положению смещения.

В приведенном ниже примере цитируемой линии делает это ясно:

$subject = "abcdef"; 
$pattern = '/^def/'; 
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3); 

Это не находит совпадение, потому что даже если def находится по смещению 3 в строке, это не в начале строки.

Если смещение было просто проигнорировано, вы можете использовать шаблон, такой как /^abc/, и он будет соответствовать. Но это тоже не будет соответствовать, потому что abc до смещения.

+0

тогда как этот параметр когда-либо полезен, если подобные утверждения могут привести к его несоответствию –

+0

Это полезно для других регулярных выражений. – Barmar

+0

Образец будет соответствовать, если делать '; preg_match ($ pattern, substr ($ subject, 3), $ matches, PREG_OFFSET_CAPTURE); ' –

Смежные вопросы