Разработка компиляторов

       

Пример использования механизма регулярных выражений .NET


Пример использования механизма регулярных выражений .NET

void DumpHrefs(String inputString) { Regex r; Match m; r = new Regex("href\\s*=\\s*(?:\"(?<1> [^\"]*)\"|(?<1>\\S+))", RegexOptions.IgnoreCase|RegexOptions.Compiled); for (m = r.Match(inputString); m.Success; m = m.NextMatch()) { Console.WriteLine("Found href " + m.Groups[1] + " at " + m.Groups[1].Index); } }

Рассмотрим пример использования регулярных выражений .NET. В примере выше приведена функция, позволяющая найти в строке все выражения вида href="…". Для этого используются два объекта - Regex, задающий регулярное выражение для поиска, и Match, позволяющий обработать результаты применения регулярного выражения ко входной строке.

Регулярное выражение r описывает следующий шаблон для поиска: строка href, за которой следует произвольное количество пробелов, за которыми следует символ = , затем снова произвольное количество пробелов, за которым следует кавычка. Начиная с кавычки, все последующие символы до закрывающей кавычки записываются в специальную строку под номером один <1>. Эта строка впоследствии выводится на печать для всех найденных вхождений такого шаблона (см. печать m. Groups[1] ).

Более подробное описание синтаксиса и возможностей регулярных выражений можно найти в документации к Visual Studio.NET.

К сожалению, механизм регулярных выражений .NET вряд ли применим для решения задач лексического анализа в целом. Этот механизм хорошо подходит для проверки наличия того или иного шаблона в заданной входной строке, но использовать его для записи всех возможных последовательностей входных лексем было бы крайне неудобно. Кроме того, регулярные выражения .NET не дают возможности исполнения сторонних действий в процессе нахождения шаблонов в строке.



Содержание раздела