#regex #regex-group
Вопрос:
Я пытаюсь проверить введенный путь URI с помощью шаблона подстановочных знаков в виде звездочек одинарной(*) или двойной (**). Например: /path1/*/path2/
или /path1/path2/**/path3
Я придумал регулярное ^(?:/w /?|/*/?|/**/?) $
выражение, которое соответствует всем допустимым путям из списка ниже, за исключением: /foo*
и /foo**
и не соответствует недопустимому, за исключением одного /foo//bar
Не могли бы вы предложить лучшее регулярное выражение для всех случаев и, возможно, более оптимизированное, чем мое.
https://regex101.com/r/U65utY/1
Учитывая допустимый путь, такой как:
- /фу/бар
- /фу/бар/
- /*
- /фу/*
- /фу/*/бар
- /фу*
- /**
- /фу**
- /фу/**
- /фу/**/бар
и недопустимый путь, такой как:
- фу
- фу/бар
- //фу
- /фу//бар
- /фу/***/бар
- /***
Комментарии:
1. Попробуйте
^(?:/(?:*{1,2}|w *{0,2})) /?$
, посмотрите демонстрацию2. Или
^(?:/(?!/)w**{0,2}) $
3. Небольшое примечание: вам не нужно избегать косых черт вперед — они не имеют особого значения. т. е. ваше регулярное
^(?:/w /?|/*/?|/**/?) $
выражение идентично^(?:/w /?|/*/?|/**/?) $
. Хотя некоторые языки/инструменты разделяют регулярное выражение косыми чертами, это не делает экранирование косых черт, требуемое в этом контексте, частью регулярного выражения.
Ответ №1:
Вы можете использовать
^(?:/(?:*{1,2}|w *{0,2})) /?$
Смотрите демонстрацию регулярных выражений
Подробные сведения
^
— начало строки(?:/(?:*{1,2}|w *{0,2}))
— одно или несколько случаев/
— а/
чар(?:*{1,2}|w *{0,2})
— одна из альтернатив:*{1,2}|
— одна или две звездочки, илиw *{0,2}
— один или несколько символов слова, а затем ноль, одна или две звездочки
/?
— необязательный/
$
— конец веревки.