Использование регулярных выражений
Как и было обещано, сейчас мы познакомимся с регулярными выражениями. Чем же они могут нам помочь?
Представим себе такую ситуацию. Вам нужно найти в исходном HTML - коде страницы интернет-адрес, причем любой. Как вы это сделаете? Правильно, введете в поле Search For окна поиска и замены (см. рис. 2.27) символы www. И найдете... кое-что. Но не все. Ведь интернет-адреса совсем не обязательно начинаются на "www". Что в этом случае искать? Точку? Но точек в тексте и так хватает, и далеко не всякая из них является частью интернет-адреса.
В этом случае нам на помощь придет регулярное выражение. Оно будет иметь следующий вид:
"http://.+..{2, 3}"
Ну и как оно вам? Больше похоже на бессмысленный набор символов, в котором с трудом угадывается что-то знакомое. Признаться, автор и сам сначала с трудом в них разбирался. Ему помогала вот такая табличка — см. табл. 2.1.
Таблица 2.1. Регулярное выражение поиска интернет-адресов
|
Вы можете попробовать это регулярное выражение в действии. Только не забудьте выбрать в раскрывающемся списке Search For пункт Source Code.
Как видите, в регулярных выражениях используются специальные символы — литералы. С их-то помощью и задаются условия поиска тех или иных символов. Если вы хотите найти какой-либо символ, совпадающий с литералом, вы должны будете предварить его обратной косой чертой. Например, чтобы найти точку, вы должны использовать такую последовательность символов:
С помощью регулярных выражений вы можете выполнять поиск самых разных слов и словосочетаний. Например, регулярное выражение совпадает со словами "multimedia" и "hypermedia", но не совпадает со словом "media". Литерал | задает поиск либо первой, либо второй подстроки (в нашем случае либо "multi", либо "hyper"), а скобки здесь использованы для того, чтобы отделить друг от друга две части выражения. Если бы мы их не поставили, получилось бы выражение
"(multi|hyper)media"
"multi I hypermedia"
Совпадающее со словами "multi" и "hypermedia".
А регулярное выражение
"/b.+0.+.com"
Ищет адреса электронной почты на серверах, чей интернет-адрес оканчивается на "сот". Здесь вам все знакомо, за исключением литерала /ь, обозначающего границу слова. То есть точка задает поиск любого символа, а /ь. — только символа, с которого начинается слово (пробел или возврат каретки). А как насчет вот такого выражения:
"[.!?]$"
Оно ищет любой знак препинания, находящийся в конце текстового абзаца. В этом выражении используется много новых символов, так что мы рассмотрим его подробно. По аналогии с предыдущим регулярным выражением, расшифруем его с помощью табл. 2.2.
Таблица 2.2. Регулярное выражение поиска последнего знака препинания абзаца |
|
Символы |
Описание |
[.!?] |
Один из возможных символов: точка, восклицательный и вопросительный знаки. Заметьте, что вопросительный знак предварен обратной косой чертой, т. к. иначе Dreamweaver воспринял бы его как литерал |
$ |
Этот литерал обозначает конец строки |
Хорошо, при поиске подстрок регулярные выражения очень нам помогают. Но помогут ли они при замене?
Еще как!
Предположим, например, что нам необходимо найти все нужные адреса электронной почты и заменить у них окончание "сот" на "ru". Для поиска в этом случае мы используем уже знакомое и работающее регулярное выражение:
"/Ь(.+0.+.)сот"
Постойте, но зачем мы взяли часть его в скобки? Ведь скобки используются для группировки, отделения части регулярного выражения от других частей. Здесь же ничего отделять не нужно — все и так работает.
А вот зачем.
Дело в том, что Dreamweaver, кроме всего прочего, помещает подстроку, совпадающую с заключенной в скобки частью регулярного выражения, в особую ячейку памяти, откуда ее можно потом будет извлечь. Таких ячеек памяти всего девять, и обращаться к их содержимому можно по номеру. В частности, извлечь содержимое первой ячейки в нашем случае можно так:
"$1"
Тогда заменить окончание почтового адреса можно с помощью такого регулярного выражения:
"$lru"
Здесь все совсем просто. Мы берем первую подстроку и добавляем к ней окончание "ru". Наберите в окне документа несколько произвольных адресов электронной почты и проверьте наши выражения. Они работают.
Напоследок самое время привести полный список всех литералов регулярных выражений. Они перечислены в табл. 2.3.
Таблица 2.3. Литералы регулярных выражений
|
Таблица 2.3 (окончание)
|