Вы можете использовать сопоставление начала строки вплоть до двоеточия и использовать класс отрицанных символов, чтобы не совпадать с нежелательными символами сразу после.Вы можете добавить пробел или \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+ раз
)?
Закрыть группу без захвата и сделать ее необязательной $
Конец строки