Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

Задание количества повторений символов

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

Одиночный метасимвол

Метасимвол точка "." внутри регулярного выражения точка соот­ветствует любому одиночному символу, кроме символа перевода строки.

 

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

"с.р"

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

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

4.4.14.7.1. Метасимвол "+"

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

 

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

"ком+а"

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

4.4.14.7.2. Метасимвол "*"

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

 

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

"точе*к"

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

4.4.14.7.3. Метасимвол "?"

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

 

 

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

"ком?а"

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

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

{ 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.89. Задание классов символов в регулярных выражениях:

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

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

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

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

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

 

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

"[^А-Я ]"

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

 

Так как в классах символы "]", "^" и "-" имеют специальное значение, для их использо­вания в классе существуют определенные правила:

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

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

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

 

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

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

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

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

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

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

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

· \u hhhh – соответствует символу 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 +"'");

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

 

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

· \c x – соответствует управляющему символу 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 (нет тире перед предпоследней цифрой номера).




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 477; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.059 сек.