Я играю с регулярными выражениями, и я попробовал escape-последовательность \ Q .. \ E.Как preg_match обрабатывает разделитель при использовании Q .. E?
Первая попытка:
$regex = '/\Q http:// \E/';
var_dump(preg_match($regex, ' http:// '));
Он говорит мне, что '\' неизвестен модификатор, вполне понятно.
Вторая попытка:
$regex = '/\Q http:\/\/ \E/';
var_dump(preg_match($regex, ' http:// '));
var_dump(preg_match($regex, ' http:\/\/ '));
Он работает, не соответствует первой строке, но соответствует второй.
Я знаю, что я мог бы использовать другой символ разделителя или решить его без \ Q .. \ E, но мне любопытно, как это работает.
Я через это сначала отделяет регулярное выражение от модификаторов разделителем (при необходимости обрабатывая экранирование), и после этого механизм регулярных выражений интерпретирует \ Q .. \ E, но это похоже на то, Q, то он не обрабатывает экранированный разделитель таким же образом.
Что происходит именно в этом случае?
Спасибо!
Ну, тогда это плохая реализация в PHP, верно? Когда я даю \ E, он не должен искать разделитель. В perl, например, print ("http: //" = ~/\ Q http: \/\/\ E /); дает, что это совпадения. Благодаря! – face
@face: «Плохо», я не знаю, Это выбор. Какая реализация видит экранированные символы как буквенные символы внутри '\ Q ... \ E'? Это всего лишь точка зрения. –