Регулярное выражение, которое не допускает начальный пробел и любой символ из (^ \\ /: *? "<> |) - PullRequest
0 голосов
/ 01 марта 2019

У меня есть регулярное выражение типа "^[a-zA-Z]:(\\\\+[^\\/:*?"<>|]+)*([\\\\]+)?$", которое отвечает за проверку пути к файлу.

Он успешно проверяет пути, такие как C:\Users\data и C:\\Users\\data

Я хочу строку, котораяпосле "C:\" не начинается с пробела и не содержит (^\\/:*?"<>|) символов.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Как сказано здесь

Отрицательный взгляд необходим, если вы хотите сопоставить что-то, за чем не следует что-то еще.При объяснении классов символов в этом руководстве объясняется, почему нельзя использовать отрицательный класс символов для сопоставления с символом q, за которым не следует символ u.Отрицательный взгляд предоставляет решение: q (?! U)

Таким образом, вы можете смешать его с оператором if-then-else regex, например (?(?!your_pattern_in_regex)match_then|match_else)

0 голосов
/ 01 марта 2019

Вы можете использовать сопоставление начала строки вплоть до двоеточия и использовать класс отрицанных символов, чтобы не совпадать с нежелательными символами сразу после.Вы можете добавить пробел или \s к этому классу символов, чтобы он также не соответствовал этому.

Также вы можете использовать группу захвата и обратную ссылку, какой вариант используется для обратной косой черты \\ или \

После этого вы можете использовать повторяющийся шаблон и указать, какие символы разрешить для остальной части строки.

^[a-zA-Z]:(\\+)(?:[^\\/:*?"<>|\s][\w&]+(?: [\w&]+)*(?:\1[a-zA-Z&]+)*)?$

Regex demo

Будет соответствовать:

  • ^ Начало строки
  • [a-zA-Z]: - [a-zA-Z]: Совпадение a-zA-Z и двоеточия
  • (\\+) Захват в группе 1+ раз обратной косой черты для ссылки на нее
  • (?: Не захватывающая группа
    • [^\\/:*?"<>|\s] Класс отрицательных символов не соответствует 1+ раз в списке (Добавлено \s но вы также можете просто использовать пробел)
    • [\w&]+(?: [\w&]+)* Совпадение 1+ раз с символом слова и повторение 0+ раз с пробелом и 1+ раза с символом слова.Обратите внимание, что вы можете расширить класс символов так, чтобы он соответствовал вашему желанию.
    • (?: Группа без захвата
      • \1[a-zA-Z&]+ Сопоставить обратную ссылку с тем, что захвачено в группе 1, затем 1+ раз a-zA-Z (Вы также можете добавить к классу персонажей то, что хотели бы соответствовать)
    • )* Закрыть группу без захвата и повторить ее 0+ раз
  • )? Закрыть группу без захвата и сделать ее необязательной
  • $ Конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...