Я разрабатывал простое регулярное выражение для анализа части URL-адреса, регулярное выражение должно уметь фиксировать часть URL-адреса в именованной группе, есть только несколько допустимых символов (a-z0-9 и -), если присутствуют другие символы regexp должен терпеть неудачу для данной строки, и захват не будет выполнен.
Но, как вы можете видеть на скриншоте, когда регулярное выражение обнаруживает знак%, он останавливается и захватывает часть перед ней (если она длиннее двух символов), результат остается без границ слов (\ b).
Я не могу понять, почему% действует как \n, и движок захватывает предыдущие символы и останавливает% не в разрешенном списке символов, поэтому он должен терпеть неудачу для этой строки... или нет?
Я тоже пробовал в реальном PHP-коде, с тем же результатом.
ИЗМЕНИТЬ 1:
Фактический код PHP:
if (preg_match('/fixed_url_part/\b(?P<codename>[a-z0-9-]{2,})\b', $url, $regs)) {
return $regs['codename'];
}
Вы не сказали, чтобы он соответствовал всей линии. Добавьте $
чтобы он соответствовал концу.
^/fixed_url_part/\b(?P<codename>[a-z0-9\-]{2,})\b$
^-- match start of line ^-- match end of line
-
также в группе, как хочет ОП.
^
, на всякий случай. (Я полагаю, что abc/fixed_url_part/def
должен потерпеть неудачу.)
%
.