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

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

Классы символов — это просто форма перечисления (указание альтернатив), в котором каждая группа состоит из одного символа. В простейшем случае список возможных символов заключается в квадратные скобки:

/[aeiou]/ # Соответствует любой из букв а, е, i, о, и; эквивалентно

          # /(a|e|i|o|u)/, только группа не запоминается.

Внутри класса символов управляющие последовательности типа по-прежнему распознаются, но такие метасимволы, как . и ?, не имеют специального смысла:

/[. ?]/ # Сопоставляется с точкой, символом новой строки,

         # вопросительным знаком.

Символ каре (^) внутри класса символов имеет специальный смысл, если находится в начале; в этом случае он формирует дополнение к списку символов:

[^aeiou] # Любой символ, КРОМЕ а, е, i, о, и.

Дефис внутри класса символов обозначает диапазон (в лексикографическом порядке):

/[а-mA-М]/  # Любой символ из первой половины алфавита.

/[^а-mA-М]/ # Любой ДРУГОЙ символ, а также цифры и символы. отличные

            # от букв и цифр.

Дефис в начале или в конце класса символов, а также каре в середине теряют специальный смысл и интерпретируются буквально. То же относится к левой квадратной скобке, но правая квадратная скобка, очевидно, должна экранироваться:

/[-^[]]/ # Сопоставляется с дефисом, каре и правой квадратной скобкой.

Регулярные выражения в Ruby могут содержать ссылки на именованные классы символов вида [[:name:]]. Так, [[:digit:]] означает то же самое, что образец [0-9]. Во многих случаях такая запись оказывается короче или, по крайней мере, понятнее.

Есть еще такие именованные классы: [[:print:]] (символы, имеющие графическое начертание) и [[:alpha:]] (буквы):

s1 = "abc07def"

/[[:print:]]*/.match(s1)

m1 = Regexp::last_match[0] # "abc"

s2 = "1234def"

/[[:digit:]]*/.match(s2)

m2 = Regexp::last_match[0] # "1234"

/[[:digit:]] + [[:alpha:]]/.match(s2)

m3 = Regexp::last_match[0] # "1234d"

Каре перед именем класса символов формирует его дополнение:

/[[:^alpha:]]/ # Все символы, кроме букв.

Для многих классов имеется также сокращенная нотация. Наиболее распространены сокращения d (любая цифра), w (любой символ, входящий в состав «слова») и s (пропуски — пробел, знак табуляции или новой строки):

str1 = "Wolf 359"

/w+/.match(str1)     # Соответствует "Wolf" (то же, что /[a-zA-Z_0-9]+/)

/w+ d+/.match(str1) # Соответствует "Wolf 359"

/w+ w+/.match(str1) # Соответствует "Wolf 359"

/s+/.match(str1)     # Соответствует " "

«Дополнительные» формы обычно записываются в виде прописной буквы:

/W/ # Любой символ, не входящий в состав слова.

/D/ # Все кроме цифр.

/S/ # Все кроме пропусков.

Дополнительная информация, относящаяся только к Oniguruma, приводится в разделе 3.13.

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Похожие главы из других книг:

35. Классы

Из книги автора

35. Классы Предназначение понятия класса заключается в том, чтобы предоставить инструмент для образования новых типов, таких же удобных в обращении, как и встроенные типы. В идеальном случае новый тип способом применения не должен отличаться от встроенных типов, только


R.3.5 Классы памяти

Из книги автора

R.3.5 Классы памяти Существует два описываемых класса памяти: автоматический и статический.Автоматические объекты становятся локальными при передаче управления в каждый блок.Статические объекты существуют и сохраняют свое значение во все время выполнения


R.9 классы

Из книги автора

R.9 классы Класс есть тип. Его имя используется как имя-класса (§R.9.1), т.е. становится зарезервированным словом в его области видимости.имя-класса: идентификаторДля образования конструкции имя-класса используются спецификации-класса и спецификации-сложного-типа (§R.7.1.6).


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

Из книги автора

3.8. Классы символов Классы символов — это просто форма перечисления (указание альтернатив), в котором каждая группа состоит из одного символа. В простейшем случае список возможных символов заключается в квадратные скобки:/[aeiou]/ # Соответствует любой из букв а, е, i, о, и;


Классы

Из книги автора

Классы Класс — это структура, предназначенная для хранения данных (полей и свойств), а также кода, обрабатывающего эти данные (методы). Поля, методы и свойства называют членами класса.Класс может быть создан на основе другого класса — в этом случае он называется


Определение класса символов и преобразование символов

Из книги автора

Определение класса символов и преобразование символов Функция Краткое описание isalnum проверка на букву или цифру isalpha проверка на букву isascii проверка на символ из набора кодировки ASCII iscntrl проверка на управляющий символ isdigit проверка на десятичную


13. Классы

Из книги автора

13. Классы Механизм классов в C++ позволяет пользователям определять собственные типы данных. По этой причине их часто называют пользовательскими типами. Класс может наделять дополнительной функциональностью уже существующий тип. Так, например, IntArray, введенный в главе 2,


Классы

Из книги автора

Классы В программах, написанных на языке С, данные и функции, предназначенные для их обработки определяются отдельно. Такое разделение затрудняет структурированное программирование и создает дополнительные возможности для ошибок, которые трудно обнаружить.В С++


5.2.2 Классы

Из книги автора

5.2.2 Классы Описание date в предыдущем подразделе дает множество функций для работы с date, но не указывает, что эти функции должны быть единственными для доступа к объектам типа date. Это ограничение можно наложить используя вместо struct class:class date (* int month, day, year; public: void set(int, int, int);


Классы

Из книги автора

Классы ОО-метод основан на понятии класса. Неформально, класс - элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Абстрактный тип данных - множество объектов, определяемое списком компонентов (features) - операций, применимых к этим


Классы

Из книги автора

Классы В поиске, начатом в лекции 3, АТД будут служить непосредственной основой модулей. Точнее, ОО-система будет строиться (на уровне анализа, проектирования и реализации) как совокупность взаимодействующих, частично или полностью реализованных АТД. Основное понятие


Отложенные классы как частичные интерпретации: классы поведения

Из книги автора

Отложенные классы как частичные интерпретации: классы поведения Не все отложенные классы так близки к АТД как STACK. В промежутке между полностью абстрактным классом, таким как STACK, в котором все существенные компоненты отложены, и эффективным классом, таким как FIXED_STACK,