Что касается практики и последующей разработки, я работаю над PHP-маршрутизатором. Для этого маршрутизатора, мои преобразованные маршруты могут иметь параметры в них, маршрут выглядит следующим образом:Поиск нескольких совпадений регулярных выражений в одной строке
/дома/{я: pageNum}/{s: имя_пользователь}
Есть теперь 2 переменных в этом маршруте:
- переменная pageNum, которая представляет собой тип INT
- переменная имя_пользователя, которая является тип строки
Для захвата этих данных, я написал это регулярное выражение:
{((?<type>\D):)?(?<name>[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]+)}
Это прекрасно работает, но единственная проблема с этим является то, что она только фиксирует только первую переменную.
Он снимает больше этих совпадений, когда я помещаю новый маршрут на новую строку.
Я попытался захватить все регулярное выражение, окружив его (
и )
. Это не сработало.
Как я могу сделать это регулярное выражение так, чтобы оно фиксировало больше совпадений в одной строке текста?
Для вызова этого регулярное выражение, я использую следующий PHP функции:
preg_match("/{((?<type>\D):)?(?<name>[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]+)}/", "/home/{i:pageNum}/{s:userName}", $matches);
Какую функцию php вы используете, чтобы соответствовать? – h4r5h4
вы можете показать php-код, где вы используете это регулярное выражение? Я предполагаю, что проблема заключается в том, что вы используете [preg_match()] (https://php.net/preg_match) вместо [preg_match_all()] (https://php.net/preg_match_all). PHP имеет две отдельные функции для сопоставления один раз vs global, а некоторые другие языки просто используют '// g' для глобального сопоставления. –
Я обновил свой вопрос, я использую preg_match(). – Bas