Соответствие регулярному выражению как минимум 3 раза в обратном слэше - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть следующие строки, которые мне нужно дифференцировать.

\\server\path1\path2
\\server\path1

Первое вхождение - это всегда две косые черты \\, но это не может быть начало строки. Там могут быть пробелы или другой текст раньше.

В первой строке должно быть не менее 4 обратных слешей \\ сервер \ path1 \ path2 ...... more backslashes

Во второй строке должно быть только 3 обратных слэша \\ сервер \ путь1

Мне понадобятся 2 выражения регулярных выражений.

Для строки 1 я смог придумать

[\\\\]{1}[a-zA-Z_\-0-9]+[\\]{1}[a-zA-Z_\-0-9]+[\\]

Объяснение

[\\\\]{1}            one occurrence of \\
[a-zA-Z_\-0-9]+      any number of one or more alphanumeric with dash (-)
[\\]{1}              one occurrence of \
[a-zA-Z_\-0-9]+      any number of one or more alphanumeric with dash (-)
[\\]                 one occurrence of \

Для строки 2, как ограничить количество совпадений backsla sh только 3.

1 Ответ

0 голосов
/ 24 апреля 2020

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

(?<!\\)\\(?:\\[^\\]+){3}(?!\S)
(?<!\\)\\(?:\\[^\\]+){2}(?!\S)

См. regex # 1 demo и regex # 2 demo .

Подробности

  • (?<!\\) - отрицательный взгляд сзади, который не соответствует совпадению, если слева от текущего местоположения есть \
  • \\ - \ char
  • (?:\\[^\\]+){3} - три (или 2, как во втором регулярном выражении) вхождения последовательности \ char и затем 1 или более символов, отличных от \
  • (?!\S) - отрицательный вывод, который не соответствует совпадению, если сразу справа от текущего местоположения нет непробельного символа (т.е. должен быть пробел или конец строки).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...