2016-06-22 2 views
1
private static readonly Regex FileDirectoryRegex = new Regex(@"^[^""\\:|<>*?]*\/{0,1}$"); 

if (folderName.EndsWith("/") || folderName.Contains("//")) 
{ 
    throw new ArgumentException()); 
} 

Как добавить последний if подтверждение утверждения на мой FileDirectoryRegex?Как изменить регулярное выражение?

+1

Вы имели в виду 'FileDirectoryRegex.IsMatch (folderName)'? –

+0

Нет, я хочу изменить свое регулярное выражение. Он должен включать последний 'if'. Я не хочу иметь их обоих: 'if' и' regex' – Anatoly

+2

Я думаю, вам нужно '@"^(?!. * //) [^ "" \\: | <> *?] * (?

ответ

4

Вы можете объединить if условия для вашего регулярного выражения следующим образом:

@"^(?!.*//)[^""\\:|<>*?]*(?<!/)$" 
    ^^^^^^^^    ^^^^^^ 

Смотрите regex demo at RegexStorm (немного изменено там, так как это многострочный строка демо)

(?!.*//) является отрицательным опережением, что проиграет матч, если двигатель найдет // где-то после символов 0+, кроме новой строки (.*), а (?<!/) - это отрицательный lookbehind, который потерпит неудачу, если есть / прямо до конца o f строка.

HOWEVER, многие пользователи говорят, что это плохая практика, чтобы втиснуть все условия в 1 регулярное выражение, пожалуйста, подумайте над тем, чтобы выбрать более читаемый подход (тот, который у вас есть сейчас, разделить условия).

Смежные вопросы