Я хотел бы проверить, будет ли регулярное выражение соответствовать части строки по определенному индексу (и только начиная с этого конкретного индекса). Например, учитывая строку «один два 3 4 пять», я хотел бы знать, что в индексе 8 регулярное выражение [0-9] + будет соответствовать «3». RegularExpression.IsMatch и Match оба берут начальный индекс, однако они оба при необходимости будут искать совпадение во всей оставшейся части строки.
string text="one two 3 4 five";
Regex num=new Regex("[0-9]+");
//unfortunately num.IsMatch(text,0) also finds a match and returns true
Console.WriteLine("{0} {1}",num.IsMatch(text, 8),num.IsMatch(text,0));
Очевидно, я мог бы проверить, начинается ли полученное совпадение с интересующего меня индекса, но я буду делать это большое количество раз для больших строк, поэтому я не хочу тратить время на поиск совпадений позже в строке. Кроме того, я не буду заранее знать, какие регулярные выражения я буду на самом деле тестировать для строки.
Я не хочу:
- разбить строку на некоторой границе
как пробел, потому что в моем
ситуация, которую я не буду знать заранее
какая подходящая граница будет
- необходимо изменить входную строку в
любым способом (например, получение подстроки
в индексе 8, а затем с помощью ^ в
регулярное выражение)
- поиск остальной части
строка для матча или сделать что-нибудь
иначе это не было бы для исполнителей
большое количество тестов против
большая строка.
Я хотел бы проанализировать потенциально большой текст, предоставленный пользователем, используя произвольную пользовательскую грамматику. Грамматика будет определена в BNF или PEG-подобном синтаксисе, а терминалы будут либо строковыми литералами, либо регулярными выражениями. Таким образом, мне нужно проверить, соответствует ли следующая часть строки какому-либо из потенциальных терминалов, управляемых грамматикой.