PHP регулярное выражение для сопоставления групп в строке - PullRequest
2 голосов
/ 11 марта 2019

У меня есть проект PHP, который использует маршрутизацию, он передает запрошенный URL-адрес feedback/services/mytoken У меня есть регулярное выражение, которое обнаруживает части, которые передаются в сценарий с этим /^feedback(\/(?P<form>.*))(\/(?P<token>.*))/U примером RegEx Test это работает нормальнона данный момент, но я понял, что у меня возникнут некоторые проблемы, когда URL будет feedback/service, он не поднимет его.

// working
$request = 'feedback/services/mytoken';
$regex = '/^feedback(\/(?P<form>.*))(\/(?P<token>.*))/U';
// returns
$returns = [
"form" => 'services',
"token" => "mytoken" 

];

// not working
$request = 'feedback/services';
$regex = '/^feedback(\/(?P<form>.*))(\/(?P<token>.*))/U';
// expected returns
$returns = [
"form" => 'services'
];

Я хочу иметь возможность правильно захватывать группы, но я не уверен в правильном способе сделать это.Также я хочу иметь возможность забрать его, если только его часть соответствует, то есть отправлено feedback/services, оно сгруппирует форму по службам и не совпадет с токеном

1 Ответ

2 голосов
/ 11 марта 2019

Вы можете использовать

'~^feedback(?:/(?P<form>[^/]*))?(?:/(?P<token>[^/]*))?~'

См. Демонстрационную версию regex

Если справа больше не должно появляться текста, добавьте $ в концерегулярное выражение:

'~^feedback(?:/(?P<form>[^/]*))?(?:/(?P<token>[^/]*))?$~'

Подробности

  • ^ - начало ввода
  • feedback - буквенная строка
  • (?:/(?P<form>[^/]*))? - необязательная группа без захвата:
    • / - символ / (не нужно сбегать, поскольку ~ используется символ-разделитель регулярных выражений)
    • (?P<form>[^/]*) - Группа "form": любые 0 или более символов, отличных от /
  • (?:/(?P<token>[^/]*))? - необязательная группа без захвата:
    • / - / char
    • (?P<token>[^/]*) - группа "токен": любые 0 или более символов, кроме /
  • $ - конецвход.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...