|  |  |  | 
Использование 
  регулярных выражений
  
 Как 
  и было обещано, сейчас мы познакомимся с регулярными выражениями. Чем же они 
  могут нам помочь?
  
 Представим 
  себе такую ситуацию. Вам нужно найти в исходном HTML-коде страницы интернет-адрес, 
  причем любой. Как вы это сделаете? Правильно, введете в поле Search For окна 
  поиска и замены (см. рис. 2.27) символы www. И найдете... кое-что. Но не все. 
  Ведь интернет-адреса совсем не обязательно начинаются на "www". Что 
  в этом случае искать? Точку? Но точек в тексте и так хватает, и далеко не всякая 
  из них является частью интернет-адреса.
  
 В 
  этом случае нам на помощь придет регулярное выражение. Оно будет иметь следующий 
  вид:
  
 "http://.+\..{2,3}"
  
 Ну 
  и как оно вам? Больше похоже на бессмысленный набор символов, в котором с трудом 
  угадывается что-то знакомое. Признаться, автор и сам сначала с трудом в них 
  разбирался. Ему помогала вот такая табличка — см. табл. 2.1.
  
 Таблица 
  2.1. Регулярное выражение поиска интернет-адресов
  
|  Символы |  Описание | ||
|  "http:// |  Первая 
            кавычка и начало интернет-адреса | ||
|  . |  Точка 
            обозначает любой символ | ||
|  + |  Плюс 
            обозначает, что предыдущий символ должен повториться минимум один 
            раз | ||
|  \. |  Обычная 
            точка. Ее предваряет обратная косая черта, т. к. точка — служебный 
            символ | ||
|  . |  Опять 
            любой символ | ||
|  {2,3} |  Предыдущий 
            символ должен повторяться от двух до трех раз | ||
|  " |  Закрывающая 
            кавычка | ||
 Вы 
  можете попробовать это регулярное выражение в действии. Только не забудьте выбрать 
  в раскрывающемся списке Search For пункт Source Code.
  
 Как 
  видите, в регулярных выражениях используются специальные символы — литералы. 
  С их-то помощью и задаются условия поиска тех или иных символов. Если вы 
  хотите найти какой-либо символ, совпадающий с литералом, вы должны будете предварить 
  его обратной косой чертой. Например, чтобы найти точку, вы должны использовать 
  такую последовательность символов: "\."
  
 С 
  помощью регулярных выражений вы можете выполнять поиск самых разных слов и словосочетаний. 
  Например, регулярное выражение совпадает со словами "multimedia" и 
  "hypermedia", но не совпадает со словом "media". Литерал 
  | задает поиск либо первой, либо второй подстроки (в нашем случае либо "multi", 
  либо "hyper"), а скобки здесь использованы для того, чтобы отделить 
  друг от друга две части выражения. Если бы мы их не поставили, получилось бы 
  выражение
  
 "(multi 
  | hyper) media" "multi | hypermedia"
  
 совпадающее 
  со словами "multi" и "hypermedia". А регулярное выражение
  
 "/b.+@.+\.com"
  
 ищет 
  адреса электронной почты на серверах, чей интернет-адрес оканчивается на "com". 
  Здесь вам все знакомо, за исключением литерала /b, обозначающего границу слова. 
  То есть точка задает поиск любого символа, а /b. — только символа, с которого 
  начинается слово (пробел или возврат каретки). А как насчет вот такого выражения:
  
 Оно 
  ищет любой знак препинания, находящийся в конце текстового абзаца. В этом выражении 
  используется много новых символов, так что мы рассмотрим его подробно. По аналогии 
  с предыдущим регулярным выражением, расшифруем его с помощью табл. 2.2.
  
 Таблица 
  2.2. Регулярное выражение поиска последнего знака препинания абзаца
  
|  Символы |  Описание | ||
|  [\.!\?]       |  Один 
            из возможных символов: точка, восклицательный и вопросительный знаки. 
            Заметьте, что вопросительный знак предварен обратной косой чертой, 
            т. к. иначе Dreamweaver воспринял бы его как литерал   Этот литерал обозначает конец строки | ||
 Хорошо, 
  при поиске подстрок регулярные выражения очень нам помогают. Но помогут ли они 
  при замене?
  
 Еще 
  как!
  
 Предположим, 
  например, что нам необходимо найти все нужные адреса электронной почты и заменить 
  у них окончание "com" на "ш". Для поиска в этом случае мы 
  используем уже знакомое и работающее регулярное выражение:
  
 "/b(.+@.+\.)com"
  
 Постойте, 
  но зачем мы взяли часть его в скобки? Ведь скобки используются для группировки, 
  отделения части регулярного выражения от других частей. Здесь же ничего отделять 
  не нужно — все и так работает.
  
 А 
  вот зачем.
  
 Дело 
  в том, что Dreamweaver, кроме всего прочего, помещает подстроку, совпадающую 
  с заключенной в скобки частью регулярного выражения, в особую ячейку памяти, 
  откуда ее можно потом будет извлечь. Таких ячеек памяти всего девять, и обращаться 
  к их содержимому можно по номеру. В частности, извлечь содержимое первой ячейки 
  в нашем случае можно так:
  
 "$1"
  
 Тогда 
  заменить окончание почтового адреса можно с помощью такого регулярного выражения:
  
 "$1ru"
  
 Здесь 
  все совсем просто. Мы берем первую подстроку и добавляем к ней окончание "ru". 
  Наберите в окне документа несколько произвольных адресов электронной почты и 
  проверьте наши выражения. Они работают.
  
 Напоследок 
  самое время привести полный список всех литералов регулярных выражений. Они 
  перечислены в табл. 2.3.
  
 Таблица 
  2.3. Литералы регулярных выражений
  
|  Литерал |  Описание | ||
|  ^ |  Начало 
            строки | ||
|  $ |  Конец 
            строки | ||
|  * |  Предыдущий 
            символ должен встретиться ноль, один или больше раз | ||
|  + |  Предыдущий 
            символ должен встретиться один или больше раз | ||
|  9 |  Предыдущий 
            символ должен встретиться ноль или один раз | ||
|  . |  Любой 
            символ за исключением символа новой строки | ||
|  х|у |  Должен 
            встретиться символ х или символ у | ||
|  {n} |  Предыдущий 
            символ должен встретиться точно n раз | ||
|  {m, 
            n} |  Предыдущий 
            символ должен встретиться от п до m раз | ||
|  [abc] |  Должен 
            встретиться один из символов, перечисленных в квадратных скобках. 
            Можно задавать диапазоны символов, например [a-d] заменяет [abed] | ||
|  [^аbс] |  Должен 
            встретиться любой символ, кроме перечисленных в квадратных скобках. 
            Можно задавать диапазоны символов | ||
|  \b |  Граница 
            слова (пробел или возврат каретки) | ||
|  \B |  Не граница 
            слова | ||
|  \d |  Любая 
            цифра. Эквивалентен [0-9] | ||
|  \в |  Любой 
            символ, кроме цифры. Эквивалентен [^0-9] | ||
|  \f |  Прогон 
            листа | ||
|  \n |  Перевод 
            строки | ||
|  \r |  Возврат 
            каретки | ||
|  \s |  Любой 
            пробельный символ (пробел, табуляция, прогон страницы или перевод 
            строки) | ||
|  \S |  Любой 
            символ, кроме пробела | ||
|  \t |  Табуляция | ||
|  \w |  Любой 
            алфавитно-цифровой символ или подчеркивание. Эквивалентен  [a-zA-Z0-9_] | ||
|  \W |  Любой 
            символ, кроме алфавитно-цифрового и подчеркивания. Эквивалентен [^а-zА-z0-9 
            ] | ||
|  |  |  |