Регулярные выражения

Если функций поиска, поддерживаемых классом String, окажется недостаточно, в пространство имен System.Text входит класс Regex, предназначенный для работы с регулярными выражениями. Регулярные выражения обладают чрезвычайно мощными возможностями поиска и/или замены текста.

В этом разделе приводятся примеры использования регулярных выражений, однако их подробное описание выходит за рамки этой книги. Существует несколько книг, посвященных регулярным выражениям. Эта тема также рассматривается в большинстве книг по языку Perl[1].

В классе регулярных выражений использована довольно интересная методика, обеспечивающая максимальное быстродействие. Вместо того чтобы заново интерпретировать регулярное выражение при каждой операции поиска, класс генерирует короткую программу, которая осуществляет поиск по регулярному выражению. Затем эта программа выполняется в нужный момент[2].

Пример с функцией Split() можно изменить так, чтобы позиции разбиения определялись регулярным выражением вместо отдельных символов-разделителей. При этом из приведенного выше результата исчезает «пустое» слово.

// Файл: regex.cs

// Команда компиляции:

// csc /r:system.text.regularexpressions.dll regex.cs

using System;

using System.Text.RegularExpressions;

class Test

{

public static void Main()

{

string s = "Oh, I hadn't thought of that";

Regex regex = new Regex(@"( |, )");

char[] separators = new char[] {' ', ','};

foreach (string sub in regex.Split(s))

{

Console.WriteLine("Word: {0}", sub);

}

}

}

Программа выводит следующий результат:

Word: Oh

Word: I

Word: hadn't

Word: thought

Word: of

Word: that

Приведенное регулярное выражение разделяет строку либо по пробелам, либо по комбинациям «запятая + пробел».


[1] Например, книга «Perl: библиотека программиста» (Т. Кристиансен, Н. Торкингтон), выпущенная издательством «Питер» — Примеч. перев.

[2] Программа пишется на промежуточном языке .NET — том самом языке, который генерируется C# в результате компиляции.

Предлагаю ознакомиться с аналогичными статьями: