Это мой первый вопрос для Stackoverflow... заранее извиняюсь, если я нарушу правило, задавая вопрос. Я искал свой вопрос и не смог найти ничего, связанного с тем, что я ищу, и я прочитал руководство по размещению вопросов...
Я пытаюсь создать шаблон RegEx, который будет соответствовать двум частям URL-адреса.
Пример URL:
app.company.com/base-path?parameter1=stuff¶meter2=morestuff¶meter3=ВАЖНО%20THING
В этом случае я хочу, чтобы шаблон совпадал в случае, если есть базовый путь и третий параметр, поэтому оба: / базовый путь и все параметр 3 = ВАЖНО% 20 ВЕЩЬ
Любая помощь будет оценена по достоинству! Пожалуйста, дайте мне знать, если я могу предоставить больше информации...





Вот мой ответ, и вы можете проверить, что здесь
/^.+?(/.+?)\?.+?&(parameter3=.+)$/gm
Я не знаю, какой язык вы используете, это версия PCRE2, которая используется для PHP 7.3+, но я думаю, что ее легко перенести на другой язык.
При использовании регулярных выражений существует некоторый риск, поскольку злоумышленники могут создать вредоносные parameter1 или parameter2 для подделки регулярных выражений, и вы получите неожиданный результат, особенно ПОСЛЕ ДЕКОДИРОВАНИЯ URL.
Например URL
app.company.com/base-path?parameter1=stuff¶meter2=%26parameter3%3Dmorestuff¶meter3=IMPORTANT%20THING
Плохие парни поставили parameter2=%26parameter3%3Dmorestuff, и после декодирования вы получите этот URL
app.company.com/base-path?parameter1=stuff¶meter2=¶meter3=morestuff¶meter3=IMPORTANT THING
И то, что вы получаете от регулярного выражения, это parameter3=morestuff¶meter3=IMPORTANT THING, что неожиданно.
Итак, если вы действительно хотите использовать регулярное выражение, НЕ ДЕКОДИРОВАТЬ URL ПЕРЕД СООТВЕТСТВИЕМ
Я смог решить это, потратив некоторое дополнительное время после перехода по вашей ссылке!
Спасибо за вашу поддержку! Это действительно полезно и отличное начало. Также спасибо за советы по безопасности, я буду иметь это в виду! Я полагаю, мне не удалось уточнить, что я буду искать конкретное соответствие /base-path (аналогично тому, как вы сделали это с параметром 3)... Таким образом, регулярное выражение будет соответствовать: app.company.com/base-path ?parameter1=stuff¶meter2=morestuff¶meter3=IMPORTANT%20THING Но это не будет соответствовать: app.company.com/other-base-path?parameter1=stuff¶meter2=morestuff¶meter3=IMPORTANT%20THING