Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_по_C#.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
10 Мб
Скачать
☆

4.11.1Введение в регулярные выражения

Язык регулярных выражений предназначен специально для обработки строк. Он включает два средства:

  1. Набор управляющих кодов для идентификации специфических типов символов.

  2. Система для группирования частей подстрок и промежуточных результатов таких действий.

С помощью регулярных выражений можно выполнять достаточно сложные и высокоуровневые действия над строками:

  • Идентифицировать (и возможно, помечать к удалению) все повторяющиеся слова в строке

  • Сделать заглавными первые буквы всех слов

  • Преобразовать первые буквы всех слов длиннее трех символов в заглавные

  • Обеспечить правильную капитализацию предложений

  • Выделить различные элементы в URI (например, имея http://www.professorweb.ru, выделить протокол, имя компьютера, имя файла и т.д.)

Главным преимуществом регулярных выражений является использование метасимволов — специальные символы, задающие команды, а также управляющие последовательности, которые работают подобно управляющим последовательностям C#. Это символы, предваренные знаком обратного слеша (\) и имеющие специальное назначение.

В следующей таблице специальные метасимволы регулярных выражений C# сгруппированы по смыслу.

Метасимволы, используемые в регулярных выражениях c#

Символ

Значение

Пример

Соответствует

Классы символов

[...]

Любой из символов, указанных в скобках

[a-z]

В исходной строке может быть любой символ английского алфавита в нижнем регистре

[^...]

Любой из символов, не указанных в скобках

[^0-9]

В исходной строке может быть любой символ кроме цифр

. (точка)

Любой символ, кроме перевода строки или другого разделителя Unicode-строки

\w

Любой текстовый символ, не являющийся пробелом, символом табуляции и т.п.

\W

Любой символ, не являющийся текстовым символом

\s

Любой пробельный символ из набора Unicode

\S

Любой непробельный символ из набора Unicode. Обратите внимание, что символы \w и \S - это не одно и то же

\d

Любые ASCII-цифры. Эквивалентно [0-9]

\D

Любой символ, отличный от ASCII-цифр. Эквивалентно [^0-9]

Символы повторения

{n,m}

Соответствует предшествующему шаблону, повторенному не менее n и не более m раз

s{2,4}

"Press", "ssl", "progressss"

{n,}

Соответствует предшествующему шаблону, повторенному n или более раз

s{1,}

"ssl"

{n}

Соответствует в точности n экземплярам предшествующего шаблона

s{2}

"Press", "ssl", но не "progressss"

?

Соответствует нулю или одному экземпляру предшествующего шаблона; предшествующий шаблон является необязательным

Эквивалентно {0,1}

+

Соответствует одному или более экземплярам предшествующего шаблона

Эквивалентно {1,}

*

Соответствует нулю или более экземплярам предшествующего шаблона

Эквивалентно {0,}

Символы регулярных выражений выбора

|

Соответствует либо подвыражению слева, либо подвыражению справа (аналог логической операции ИЛИ).

(...)

Группировка. Группирует элементы в единое целое, которое может использоваться с символами *, +, ?, | и т.п. Также запоминает символы, соответствующие этой группе для использования в последующих ссылках.

(?:...)

Только группировка. Группирует элементы в единое целое, но не запоминает символы, соответствующие этой группе.

Якорные символы регулярных выражений

^

Соответствует началу строкового выражения или началу строки при многострочном поиске.

^Hello

"Hello, world", но не "Ok, Hello world" т.к. в этой строке слово "Hello" находится не в начале

$

Соответствует концу строкового выражения или концу строки при многострочном поиске.

Hello$

"World, Hello"

\b

Соответствует границе слова, т.е. соответствует позиции между символом \w и символом \W или между символом \w и началом или концом строки.

\b(my)\b

В строке "Hello my world" выберет слово "my"

\B

Соответствует позиции, не являющейся границей слов.

\B(ld)\b

Соответствие найдется в слове "World", но не в слове "ld"