Программирование >>  Обработка исключительных ситуаций 

1 ... 114 115 116 [ 117 ] 118 119 120 ... 142


Глава 15. Дополнительные средства С#

Листинг 15.1 {продолжение) pb->a - 100;

Console.WriteLineC b.a );

результат: 100

Операция stackalloc позволяет в1делить память в стеке под заданное количество величин заданного типа: stackalloc тип [ количество ]

Количество задается целочисленным выражением. Если памяти недостаточно, генерируется исключение System.StackOverflowException. Выделенная память ничем не инициализируется и автоматически освобождается при завершении блока, содержащего эту операцию. Пример выделения памяти под пять элементов типа int и их заполнения числами от 0 до 4:

int* р = stackalloc int [5];

for С int i = 0; i < 5: ++i )

pC1]-1:

Console.WriteC p[i]

результат: 0 1 2 3 4

В листинге 15.2 приведен пример работы с указателями, взятый из спецификации С#. Метод IntToString преобразует переданное ему целое значение в строку символов, заполняя ее посимвольно путем доступа через указатель.

Листинг 15.2. Пример работы с указателями: перевод числа в строку using System: class Test

static string IntToString ( int value )

int n - value >- 0 ? value : -value; unsafe {

char* buffer = stackalloc char[16]; char* p = buffer + 16; do {

*-- p = (charX n % 10 + 0 );

n /- 10; } while ( n !- 0 );

if ( value < 0 ) *-- p - -:

return new stringC p. 0, (int)C buffer + 16 - p ) );

static void MainO {

Console.WriteLineC IntToStringC 12345 ) );

Console.WriteLineC IntToStringC -999 ) );



-улярные выражения 35 5

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

гулярные выражения предназначены для обработки текстовой информации обеспечивают:

эффективный поиск в тексте по заданному шаблону;

редактирование, замену и удаление подстрок;

формирование итоговых отчетов по результатам работы с текстом.

помощью регулярных выражений удобно обрабатывать, например, файлы в фор-ате HTML, файлы журналов или длинные текстовые файлы. Для поддержки егулярных выражений в библиотеку .NET включены классы, объединенные

пространство имен System.Text.RegularExpressions.

Метасимволы

егулярное выражение - это шаблон (образец), по которому выполняется поиск оответствующего ему фрагмента текста. Язык описания регулярных выражений юстоит из символов двух видов: обычных и метасимволов. Обычный символ федставляет в выражении сам себя, а метасимвол - некоторый класс символов, щпример любую цифру или букву.

Например, регулярное выражение для поиска в тексте фрагмента Вася заплавается с помощью четырех обычных символов Вася, а выражение для поиска двух цифр, идущих подряд, состоит из двух метасимволов \d\d.

С помощью комбинаций метасимволов можно описывать сложные шаблоны для поиска. Например, можно описать шаблон для IP-адреса, адреса электронной почты, различных форматов даты, заголовков определенного вида и т. д.

ПРИМЕЧАНИ Е-

Синтаксис регулярных выражений .NET в основном позаимствован из языка Perl 5 . Неподготовленного человека вид сложного регулярного в1ражения может привести в замешательство, но при вдумчивом изучении он обязательно почувствует его красоту и очарование. Пожалуй, регулярные выражения более всего напоминают заклинания, по которым волшебным образом преобразуется текст. Ошибка всего в одном символе делает заклинание бессильным, зато, верно составленное, оно творит чудеса!

В табл. 15.2 описаны наиболее употребительные метасимволы, представляющие собой классы символов.

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



Глава 15. Дополнительные средства С#

Таблица 15.2. Классы символов Класс символов Описание

Пример

Любой символ, кроме \ri

В1ражение с. t соответствует фрагментам cat, cut, clt, c{t и т. д.

Любой о.диночнIЙ символ из последовательности, записанной внутри скобок. Допускается использование ддиапазонов символов

Выражение c[aul]t соответствует фрагментам cat, cut и clt, а в1ражение c[a-z]t - фрагментам cat, cbt, cct, cdt,czt

Любой одиночный символ, не входдящий в последовательность, записанную внутри скобок. Допускается использование ддиапазонов символов

Выражение c[*aul]t соответствует фрагментам cbt, c2t, cXt и т. д., а в1ражение c[*a-zA-Z]t - фрагментам cnt, clt, c4t, c3t и т. д.

Любой алфавитно-цифровой символ, то есть символ из множества прописных и строчных букв и десятичных цифр

Выражение c\wt соответствует фрагментам cat, cut, clt, и т. д., но не соответствует фрагментам c{t, c;t и т. д.

Любой не алфавитно-цифровой символ, то есть символ, не входящий в множество прописных и строчных букв и десятичных цифр

Выражение c\Wt соответствует фрагментам c{t, c;t, С t и т. д., но не соответствует фрагментам cat, cut, clt, dOt и т. д.

Любой пробельный символ, например символ пробела, табуляции (\t, \v), перевода строки (\п, \г) , новой страницы (\f)

Выражение \s\w\w\w\s соответствует любому слову из трех букв, окруженному пробельными символами

Любой не пробельн1й символ, то есть символ, не входящий в множество пробельных

Выражение \s\S\S\s соответствует люб1м ддвум непробельным символам, окруженным пробельными

Любая десятичная цифра

Выражение c\dt соответствует фрагментам clt, c2t,c9t

Любой символ, не являющийся десятичной цифрой

Выражение C\Dt не соответствует фрагментам clt, c2t. .c9t

Таблица 15.3.

Уточняющие метасимволы

Метасимвол

Описание

Фрагмент, совпадающий с регулярн1м в1ражением, следдует искать только в начале строки

Фрагмент, совпадающий с регулярным выражением, следует искать только в конце строки

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



1 ... 114 115 116 [ 117 ] 118 119 120 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика