Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов




НазваниеЛекция 2-07 12. Создание пользовательских объектов и экземпляров объектов
страница8/10
Дата публикации15.03.2013
Размер1.04 Mb.
ТипЛекция
uchebilka.ru > Астрономия > Лекция
1   2   3   4   5   6   7   8   9   10

4.4.14.7. Квантификаторы


Квантификаторы – это метасимволы, используемые для указания количественных отношений между символами в шаблоне и в искомой строке. Квантификатор может быть поставлен после одиночного символа или после группы символов.
^
4.4.14.7.1. Метасимвол "+"

Простейшим квантификатором является метасимвол "+". Он означает, что идущий перед ним символ соответствует нескольким идущим подряд таким символам в строке поиска. Количество символов может быть любым (максимально большим в рамках соответствия шаблону), но должен присутствовать хотя бы один символ.
Пример 4.4.84. Использование метасимвола "+" в регулярных выражениях:

"ком+а"

Этому шаблону будут соответствовать слова команда и коммандос, а слово коалиция соответствовать не будет.
^
4.4.14.7.2. Метасимвол "*"

Действие метасимвола "*" похоже на действие метасимвола "+". Метасимвол "*" указывает, что идущий перед ним символ встречается нуль или более раз.
Пример 4.4.85. Использование метасимвола "*" в регулярных выражениях:

"точе*к"

Этому шаблону соответствуют слова точек и точка, а слово точечный соответствовать не будет.
^
4.4.14.7.3. Метасимвол "?"

Метасимвол "?" указывает, что предшествующий ему символ должен встречаться либо один раз, либо не встречаться вообще.

Пример 4.4.86. Использование метасимвола "?" в регулярных выражениях:

"ком?а"

Этому шаблону будут соответствовать слова команда и коалиция, а слово коммандос соответствовать не будет.
^
4.4.14.7.4. Задание количества повторений символов

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

{n,m}

Здесь n – минимально допустимое количество повторений предшествующего символа, m – максимально допустимое количество повторений. Один из параметров n или m можно опустить.
Пример 4.4.87. Использование шаблона с указанием точного числа повторений символов в регулярных выражениях:

1. "10{3,5}1"  0 встречается как минимум 3 раза, но не более 5 раз. Числа 10001, 100001 и 1000001 удовлетворяют этому условию, а числа 1001 и 10000001 – нет.

2. "10{3,}1"  0 встречается 3 или более раз. Двоичные числа 10001, 100001, 1000001, 10000001 и т.д. удовлетворяют этому условию, а числа 101 и 1001 – нет.

3. "10{0,3}1"  0 встречается не более 3 раз, но может вообще не встретиться. Числа 11, 101, 1001 и 10001 удовлетворяют этому условию, а числа 100001, 1000001 и т.д. – нет.

4. "10{3}1"  0 встречается ровно 3 раза. Двоичное число 10001 удовлетворяет этому условию, а числа 101, 1001, 100001 и т.д. – нет.
Фактически квантификаторы "+", "*" и "?" являются частными случаями конструкции {n,m}: соответственно, {1,}, {0,} и {0,1}.
^
4.4.14.7.5. Метасимволы ".*" и ".*?"

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

Если необходимо ограничить поиск, следует после квантификатора (в том числе и символа "?") указать символ "?".
Пример 4.4.88. Использование метасимволов ".*" в регулярных выражениях:

// Исходная строка

inputString = "Первый может стать как последний и " +

"последний может стать как первый.";

// Создание экземпляра объекта RegExp

re9 = new RegExp("первый.*последний","i");

// Определение соответствия шаблону

result = re9.exec(inputString);

// Вывод результата поиска

alert("result='" + result +"'");

В результате выполнения фрагмента на экран будет выведено следующее сообщение:



2. Если при создании экземпляра re9 объекта RegExp заменить шаблон на"первый.*?последний", то на экран будет выведено следующее сообщение:


^

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


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

Пример 4.4.89. Задание классов символов в регулярных выражениях:

1. "[абвг]" или "[а-г]" – любой из символов "а", "б", "в" или "г". Строка "огонь" удовлетворяет шаблону, поскольку в ней есть символ "г", а строка "окно" – не удовлетворяет, поскольку в ней нет ни одного из символов, указанных в шаблоне.

2. "Глава [0-9]+" – символы "Глава", за которыми (через пробел) следует одна или несколько цифр. Строки "Глава 5" и "Глава 18" удовлетворяет шаблону, поскольку в них после строки "Глава" и пробела следуют соответственно одна и две цифры, а строка "Глава десять" – не удовлетворяет, поскольку в ней после слова "Глава" и пробела нет ни одной цифры.

3. "[А-Я][а-я]+" – заглавная буква, за которой следует одна или несколько строчных букв. Строка "Иванов" удовлетворяет шаблону, поскольку она начинается с заглавной буквы, за которой следуют строчные буквы, а строка "ивановский" – не удовлетворяет, поскольку она начинается со строчной буквы.

4. "[.?!]" – один из символов окончания предложения (обратите внимание, что символы "." и "?" здесь используются как обычные символы, а не как метасимволы). Строки "Как дела?", "Замечательно!" и "Хорошо." удовлетворяет шаблону, поскольку они содержат символы окончания предложения, а строка "Плохо" – не удовлетворяет, поскольку она не содержит ни одного символа окончания предложения.

Если первым символом класса является знак вставки "^", то значение выражения инвертируется. Другими словами, такому классу соответствует любой символ, не входящий в класс.


Пример 4.4.90. Задание инвертированного класса в регулярных выражениях:

"[^А-Я ]"

Этому шаблону удовлетворяет строка, содержащая хотя бы один символ, не являющийся заглавной буквой или пробелом. Строки "Щит и меч", "МВД и МИД" удовлетворяет шаблону, поскольку они содержат строчные буквы, а строка "ЩИТ И МЕЧ" – не удовлетворяет, поскольку она содержит только заглавные буквы и пробелы.
Так как в классах символы "]", "^" и "-" имеют специальное значение, для их использо­вания в классе существуют определенные правила:

  • литерал "^" не должен быть первым символом класса;

  • перед литералом "]" должен стоять символ обратной косой черты;

  • для помещения в класс символа "-" достаточно либо поставить его на первую позицию, либо поместить перед ним символ обратной косой черты.


Пример 4.4.91. Задание шаблонов с учетом правил для символов "]", "^" и "-" в регулярных выражениях:

1. "[^&*%^]" – строка содержит хотя бы один символ, не являющийся одним из символов "&", "*", "%" или "^".

2. "[[\]]" – строка содержит символ "[" или символ "]".

3. "[;:\-]]" – строка содержит символ ";" , символ ":" или символ "-".
^

4.4.14.9. Специальные символы


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

Для представления кодов символов используются следующие специальные символы:

  • \xhh – соответствует символу с шестнадцатеричным кодом hh в однобайтовой кодировке;

  • \uhhhh – соответствует символу Unicode с шестнадцатеричным кодом hhhh.


Пример 4.4.92. Использование кодов символов в регулярных выражениях:

  1. // Исходная строка

inputString = "В \xA72 приведено определение системы.";

// Создание экземпляра объекта RegExp

re10 = new RegExp("\xA7[1-9]+");

// Определение соответствия шаблону

result = re10.exec(inputString);

// Вывод результата поиска

alert("result='" + result +"'");

В этом фрагменте сценария в шаблоне регулярного выражения задан символ параграфа – "§": (код A7).

В результате выполнения фрагмента на экран будет выведено следующее сообщение:




2. Использование в регулярном выражении греческих букв (в шаблоне задана любая греческая строчная буква от α до ω, за которой следует одна из цифр – 1, 2 или 3):

// Исходная строка

inputString = "Углы в треугольнике обозначены " +

"как \u03B31, \u03B32 и \u03B33."; // как α, β и γ

// Создание экземпляра объекта RegExp

re11 = new RegExp("[\u03B1-\u03C9][1-3]");

// Определение соответствия шаблону

result = re11.exec(inputString);

// Вывод результата поиска

alert("result='" + result +"'");

В результате выполнения фрагмента на экран будет выведено следующее сообщение:




^ Управляющие символы определяются в регулярных выражениях с помощью следующих специальных символов:

  • \cx – соответствует управляющему символу x (например, \cM соответствует символу Ctrl+M или символу возврата каретки);

  • \f – соответствует символу перехода на новую страницу (эквивалентно \x0c или \cL);

  • \n – соответствует символу новой строки (эквивалентно \x0a или \cJ);

  • \r – соответствует символу возврата каретки (эквивалентно \x0d или \cM);

  • \s – соответствует любому пробельному символу (эквивалентно [\f\n\r\t\v]);

  • \S – соответствует любому непробельному символу (эквивалентно [^\f\n\r\t\v]);

  • \t – соответствует символу горизонтальной табуляции (эквивалентно \x09 или \cI);

  • \v – соответствует символу вертикальной табуляции (эквивалентно \x0b или \cK).


Пример 4.4.93. Использование управляющих кодов символов в регулярных выражениях:

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

// Исходная строка

inputString = "Первая строка\nВторая строка\n" +

"Третья строка";

// Определение шаблона

re12 = new RegExp("\n","g");

// Формирование массива соответствий шаблону

matchArray = inputString.match(re12);

// Вывод количества подстрок в строке

alert("Количество строк=" + (matchArray.length + 1));

В этом фрагменте сценария выполняется определение количества подстрок в строке.

В результате выполнения фрагмента на экран будет выведено следующее сообщение:




^ Наиболее распространенные классы символов можно задать с помощью следующих специальных символов:

  • \d – соответствует любому цифровому символу (эквивалентно [0-9]);

  • \D – соответствует любому нецифровому символу (эквивалентно [^0-9]);

  • \w – соответствует любой латинской букве или цифре (эквивалентно [A-Za-z0-9]);

  • \W – соответствует любому небуквенному (латинскому) и нецифровому символу (эквивалентно [^A-Za-z0-9]).

Следует отметить, что специальные символы \w и \W нельзя использовать для букв кириллицы, а также букв западноевропейских алфавитов, отличных от латинских букв. В этом случае необходимо напрямую задавать диапазон символов, как это делается для классов символов.
Пример 4.4.94. Использование классов символов в регулярных выражениях

Шаблон для номера мобильного телефона имеет следующий вид:

\d{3}-\d{3}-\d\d-\d\d

Этому шаблону соответствует телефонный номер 067-745-12-18 и не соответствует номер 055-867-1567 (нет тире перед предпоследней цифрой номера).

4.4.14.10. Анкеры


С помощью анкеров можно указать, в каком месте строки должно быть найдено соответствие с шаблоном.

В JavaScript определены следующие анкеры:

  • ^ – соответствует позиции в начале строки;

  • $ – соответствует позиции в конце строки;

  • \b – соответствует границе слова, т.е. границе между словом и пробельным символом;

  • \B – соответствует не границе слова.

К сожалению, анкеры \b и \B действуют только для строк, состоящих из латинских букв.
Пример 4.4.95. Использование анкеров в регулярных выражениях:

// Исходная строка

inputString = "Глава 1. Пролог\nCодержимое - глава 1" +

"\n...\nГлава 12. Эпилог\nГлава 12: содержимое";

// Определение шаблона

re13 =/^Глава \d{1,2}\..*/gm;

// Формирование массива соответствия шаблону

matchArray = inputString.match(re13);

// Вывод массива соответствий шаблону в цикле

for(i = 0; i < matchArray.length; i++)

// Вывод текущего соответствия шаблону

alert("result[" + i + "]='" + matchArray[i] + "'");

В этом фрагменте сценария выполняется вывод оглавления по следующему шаблону: строка "Глава" в начале строки, затем пробел, затем одна или две цифры, затем точка, затем любое содержимое до конца строки.

В результате выполнения фрагмента на экран будут выведены следующие сообщения:




^

4.4.14.11. Группировка элементов и обратные ссылки


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

белый, красный, зеленый, желтый или черный

Эту операцию можно выполнить, задав в качестве шаблона выражение

"белый|красный|зеленый|желтый|черный",

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

"(бел|красн|зелен|желт|черн)ый"

Допускается вложение скобок, а, следовательно, и вложение групп, поэтому предыдущий пример можно записать и таким образом:

"(бел|желт|(крас|зеле|чер)н)ый".
Если в регулярных выражениях используются скобки, части искомой строки, соответствующие фрагментам в скобках, запоминаются в специальных переменных $1 (первый фрагмент в скобках), $2 (второй фрагмент в скобках), $3 (третий фрагмент в скобках) и т.д. Такая операция называется захватом (capture) переменной.

Для вложенных скобок переменные $1-$9 формируются в порядке появления левой (открывающей) скобки выражения. При использовании группировки свойство lastParen (сокращение $+) объекта RegExp возвращает последнюю найденную группу символов.

Следует отметить, что переменные модифицируются при каждом успешном поиске, независимо от использования в регулярном выражении скобок. Кроме того, значения этих переменных устанавливаются тогда и только тогда, когда строка полностью соответствует шаблону. В противном случае значения этих переменных равны пустой строке.
Пример 4.4.96. Использование свойств $1-$9 и lastParen объекта RegExp в регулярных выражениях:

// Исходная строка

inputString = "067-892-13-48 055-745-08-01";

// Определение шаблона

re14 =/((\d{3})-(\d{3}-\d\d-\d\d))/g;

// Определение первого соответствия шаблону

result = re14.exec(inputString);

// Определение остальных соответствий шаблону в цикле

for(i=1; result != null; i++)

{

// Вывод значения переменных $1, S2 и $3,

// а также свойства lastParen объекта RegExp

alert(i +"). Телефон: " + RegExp.$1 +

"\nКод оператора: " + RegExp.$2 +

" Номер: " + RegExp.$3 +

"\nlastParen=" + RegExp.lastParen);

// Определение следующего соответствия шаблону

result = re14.exec(inputString);

}

Скобки в шаблоне мобильного телефона в этом фрагменте сценария позволяют выделить весь телефонный номер ($1) и его отдельные части – код оператора ($2) и собственно номер телефона ($3).

В результате выполнения фрагмента на экран будут выведены следующие сообщения:






Переменные $1-$9 можно записывать и в выражении шаблона в форме \i, где i – номер переменной. Переменную называет обратной ссылкой.
Пример 4.4.97. Использование обратной ссылки в регулярных выражениях

Изменим шаблон для номера мобильного телефона следующим образом:

/((\d{3})-(\d{3}-(\d\d)-\4))

Такая запись означает, что последняя пара цифр должна совпадать с предпоследней парой цифр (значением переменой $4). В этом случае телефон 094-996-18-18 будет удовлетворять шаблону, а телефон 094-996-18-19 – не будет.
Переменные $1-$9 не всегда необходимо использовать как результат поиска соответствия шаблону. В случае, когда необходимо сгруппировать какие-либо символы шаблона, но не выполнять для них операции по определению соответствующих переменных (не выполнять для них операцию захвата), используется следующая форма группирования:

(?:символы)
Пример 4.4.98. Использование операции группирования без захвата в регулярных выражениях

Шаблон

"сет(?:ь|и|ью|ей|ям|ями|ях)"

будет выполнять в строке поиск слова "сеть" во всех падежах единственного и множественного числа, но при этом переменная $1 не создается.
Другим видом группировки является «заглядывание вперед». Группирование в этом случае записывается в следующем виде:

(?=символы)

В этом случае при поиске соответствия шаблону учитываются символы, заданные в скобках, но в результат поиска эти символы не входят. Следующий поиск начинается с позиции, с которой начинаются символы в скобках, т.е. результат «заглядывания вперед» не учитывается.

Вторая форма группировки с «заглядыванием вперед» записывается в следующем виде:

(?!символы)

В отличие от первой формы символы в скобках не должны содержаться в соответствии шаблону. В результат поиска эти символы не входят и результат «заглядывания вперед» также не учитывается.
Пример 4.4.99. Использование операции группирования «с заглядыванием вперед» в регулярных выражениях:

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

// Исходная строка

inputString = "^ Персональный компьютер. Компьютер - это " +

"устройство для обработки данных. Компьютерное " +

"оборудование выпускается многими фирмами";

// Определение шаблона

re15 =/компьютер(?=\s|[.,;:?!)()])/ig;

// Определение первого соответствия шаблону

result = re15.exec(inputString);

// Определение остальных соответствий шаблону в цикле

for(i=1; result != null; i++)

{

// Вывод найденного соответствия шаблону

// и его индекса в строке

alert("result='" + result + "' index=" + result.index);

// Определение следующего соответствия шаблону

result = re15.exec(inputString);

}

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

В результате выполнения фрагмента на экран будут выведены следующие сообщения:





Символы "Компьютер" в слове "Компьютерное" не соответствуют шаблону, поскольку после символа "р" следует буква, а не пробельный символ или знак препинания.
2. Если в предыдущем примере изменить шаблон следующим образом:

re15 =/компьютер(?!\s|[.,;:?!)()])/ig;

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



В данном случае, наоборот, соответствовать шаблону будут символы "Компьютер" в слове "Компьютерное", поскольку символ "н", который следует после символа "р" не совпадает ни с одним из символов, указанных в группировке.
1   2   3   4   5   6   7   8   9   10

Похожие:

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconЛекция №4 создание символов и работа с эффектами в adobe flash
Создание документа (размеры, цвет фона, частота кадров). Выравнивание объектов в документе

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconРешение городского Совета о включении в перечень объектов, подлежащих приватизации
Дополнения к Перечню объектов коммунальной собственности, включенных в перечни объектов

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconРешение №12/1 от 25. 01. 07 (пятый созыв двенадцатая сессия) "Отчет...
Ия 17 объектов коммунальной собственности. С учетом 6-и объектов, переходящих из Перечня объектов, подлежащих приватизации в 2005...

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconЛабораторная работа №3 Тема: Изучение основ параметрической анимации в 3d studio max
Цель работы: Изучить основные виды и способы анимации параметров объектов в 3d studio max: анимация по ключевым кадрам, анимация...

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconОценка эффективности инвестиций в недвижимости
В отличие от финансовых инвестиций, недвижимость имеет явно выраженную материальную форму, более высокий уровень защиты от инфляции,...

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconЛекция 5 Тема: Элементы окна программы компас-3D, управление изображением...
Анализируя свойства этих простых трехмерных геометрических объектов можно сделать вывод о том, что форма каждого из них имеет свои...

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconИнспектор ип «gsg украйна»
Инспектирование грузов и объектов (Агро сектор, Металлургия). Управление залоговым хранением. Техническое инспектирование объектов...

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconПрограмма ArCon проста и удобна в освоении и использовании. Вы научитесь...
Многократное копирование элементов и объектов. Полукруглые, круглые стены с возможностью редактирования. Загрузка объектов в режиме...

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconДиаграммы объектов
Диаграммы объектов применяют при моделировании статических видов системы с точки зрения проектирования и процессов. При этом моделируется...

Лекция 2-07 12. Создание пользовательских объектов и экземпляров объектов iconОбщие положения
Целью Программы является создание банка данных для обеспечения органов исполнительной власти полноразмерными копиями документов и...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<