Для практики я создаю свой собственный PHP-маршрутизатор. Этот маршрутизатор может принимать параметры, которые указаны следующим образом:Устранение шаблона параметра без специального символа спереди и сзади
{Я: имяПеременной}
В i
обозначает тип параметра (в данном случае целое число) и variableName
обозначает VariableName.
Один маршрутизации URI может выглядеть следующим образом:
/дом/{я: идентификатор} - {s: NOVAR}/{м: имяПерем}/{s: someOther}
Я создал следующее регулярное выражение для этой цели:
[^{}]*({((?<type>\D):)?(?<name>[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]+)})[^{}]*
для не имеющих 2 параметра рядом друг с другом, и имеющим характер рядом с ним, я расширил регулярное выражение с этой частью:
[^{}]*
Примером этого является то, что я не буду в состоянии делать такие вещи, как:
/дома/{я: идентификатор} {s: NOVAR}/{м: имяПерем} { s: someOther}
Между ними должны быть символы.
Я думал, что эта часть регулярного выражения будет делать, «Не включать ноль или более из {
или }
характера.
Когда я запускаю это регулярное выражение по шаблону, как /home/{i:id}{s:noVar}/{m:varName}/{s:someOther}
, он по-прежнему получает все параметры, даже те, которые находятся рядом друг с другом.
Как это возможно, и как я могу сделать это так, что регулярное выражение будет извлекать только параметры, которые не рядом друг с другом?
Закройте свой первый шаблон с помощью '(?
@ WiktorStribiżew Что вы имеете в виду? Я все еще новичок в регулярных выражениях. – Bas
Знаете ли вы, что '_-ÿ' создает диапазон? Это ваше намерение? –