Регулярное выражение сложно :)
Сейчас у меня есть строковое значение, которое я успешно сопоставляю со значениями для определенных ключей. Мне нужно расширить регулярное выражение, чтобы оно соответствовало значению, а не ключу.
https://www.me.com/?name=bob&identify=bob1&test=email@me.com&validKey=validValue
Текущее регулярное выражение применяется
((name|identify|test)(=|%3D)[^&]*)
Что я хочу добавить/расширить, так это соответствие любым значениям, содержащим символ @. Я не знаю, что такое «ключ» в качестве его динамики, поэтому я не могу просто добавить «badKey» в сопоставленный шаблон. Таким образом, пример ввода для этого будет:
https://www.me.com/?name=bob&identify=bob1&test=email@me.com&validKey=validValue&badKey=test2@test.com
По сути, я хочу сопоставить все существующие части, а затем и «badKey». Я знаю, что могу запустить строку через второе регулярное выражение, но ради производительности я бы хотел, чтобы это был один шаблон.
Любая помощь здесь будет оценена по достоинству.
@JohnathanBarclay Эта входная строка была просто примером, она не всегда может быть URI. Мне нужна подобная логика в нескольких местах. Я надеялся на решение этого вопроса, и тогда я мог бы понять, как это делается в URI, а затем применить логику в другом месте.
Я специально попросил Regex. В моем случае, если бы мне пришлось разбивать каждую строку, накладные расходы были бы слишком большими. Regex оказывается намного более эффективным.
Просто примечание, если вы читаете мой вопрос, я ищу ключи с определенными значениями, а затем, в частности, любое значение, которое является электронным письмом, а не только вещи между символом Amp
Я нашел шаблон, который будет соответствовать конкретным электронным письмам, а не только значениям, содержащим символ @.
(name|identify|test)(=|%3D)[^&|^%26]*|((=|%3D)(\\w+([-+.]\\w+)*[@|%40]\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*)[^&|^%26]*)
Вы отметили C#, так есть ли причина, по которой вы используете Regex вместо разбора строки запроса?