КАТЕГОРИИ: Архитектура-(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; Просмотров: 494; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |