Regex для проверки пути URI с подстановочным знаком

Я пытаюсь проверить введенный путь URI с помощью шаблона подстановки в виде одинарных (*) или двойных (**) звездочек. Например: /path1/*/path2/ или /path1/path2/**/path3

Я придумал регулярное выражение ^(?:/w+/?|/*/?|/**/?)+$, которое соответствует всем допустимым путям из списка ниже, кроме /foo* и /foo**, и не соответствует недопустимым, кроме одного /foo//bar

Не могли бы вы предложить лучшее регулярное выражение для всех случаев и, возможно, более оптимизированное, чем мое.

https://regex101.com/r/U65utY/1

Учитывая допустимый путь, например:

  • / foo / bar
  • / foo / bar /
  • / *
  • / foo / *
  • / foo / * / bar
  • / foo *
  • / **
  • / foo **
  • / foo / **
  • / foo / ** / bar

и недопустимый путь, например:

  • фу
  • foo / bar
  • // фу
  • / foo // бар
  • / foo / *** / bar
  • / ***

Всего 1 ответ


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

^(?:/(?:*{1,2}|w+*{0,2}))+/?$

См. regex demo

Подробнее

  • ^ - начало строки
  • (?:/(?:*{1,2}|w+*{0,2}))+ - одно или несколько вхождений
    • / - символ /
    • (?:*{1,2}|w+*{0,2}) - одна из альтернатив:
      • *{1,2}| - одна или две звездочки, или
      • w+*{0,2} - один или несколько символов слова, а затем ноль, одна или две звездочки.
  • /? - необязательный /
  • $ - конец строки.

Есть идеи?

10000