среда, 8 августа 2012 г.

AND в регулярном выражении

К сожалению в Regex нет возможности задавать в условии поиск с выражением &.

Первое, что приходит на ум, это использовать подобный паттерн

string pattern = ((red.*green)|(green.*red));

Ну, а что делать, если надо проверить строку с десятком совпадений?

Все просто - можно использовать следующий паттерн:

string pattern = (?=.*green)(?=.*red);


string[] test = new string[] { "green\n bbbbb red aaaa", "red\n bbbbb green aaaa", "\n bbbbb green aaaa" };
foreach (var item in test)
{
bool isMatch = Regex.IsMatch(item, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
    Console.WriteLine("Строка: {0} isMatch: {1}",item,isMatch );
}

//Результат:
Строка: "green\n bbbbb red aaaa" isMatch: true
Строка: "red\n bbbbb green aaaa" isMatch: true
Строка: "\n bbbbb green aaaa"  isMatch: false


В случае, если надо проверить строку, содержащую набор определенных слов, но при этом в строке не должно быть некоторых других слов, можно использовать следующий паттерн.
Например нам нужно найти текст содержащий слова green и red, но в котором нет слов yellow или white.

string pattern = (?(^((?!yellow)(?!white).)*$)(?=.*green)(?=.*red)|(^((?!yellow)(?!white).)*$));

Статья на википедии
Онлайн тест регулярных выражений

Комментариев нет:

Отправить комментарий