Синтаксис регулярных выражений, который соответствует любой комбинации из /, / abc /, / abc / efg / и т. Д. - PullRequest
0 голосов
/ 25 апреля 2019

Я не могу найти регулярное выражение, которое может соответствовать следующим примерам:

  1. /
  2. / а
  3. / а /
  4. / а / ххй
  5. / abc / efg /
  6. / а / EFG / ххй

Мне нужно захватить каждую переменную между /.

Пример : / abc / efg / xxx должен вернуть:

  1. Переменная 1: abc
  2. Переменная 2: EFG
  3. Переменная 3: ххх

Примечания:

  1. Текст между / всегда будет буквенно-цифровым
  2. Вышеперечисленные 6 вариантов использования - единственные, которые меня беспокоят.

1 Ответ

1 голос
/ 25 апреля 2019

Я не нашел более чистого способа, чем этот, чтобы решить вашу проблему именно так, как вы ее заявили:

^\/(?:(\w+)(?:\/(\w+)(?:\/(\w+))?)?)?((?<!\/)\/)?$

Вы можете проверить здесь: https://regex101.com/r/FJuJ43/6

Объяснение:

starts with a /: ^\/    
rest of unstored group is optional: (?: … )?    
may ends with a / unless there is another one just before: ((?<!\/)\/)?$
in the main group, first stored alphanum only subgroup: (\w+)
followed by another optional unstored subgroup, starting with a / and followed by another alphanum only stored subgroup: (?:\/(\w+) … )?
and ditto: (?:\/(\w+))?

Это работает, создавая три группы.

Но я не могу предотвратить, чтобы последний символ был трейлингом /

/ aaa / bbb / ccc / работает также, когда это не должно. Если ты справишься с этим, с тобой все будет в порядке.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...