Dreamweaver регулярные выражения примеры

Обновлено: 06.07.2024

Регулярные выражения (regular expressions) - это текстовый шаблон, который соответствует какому-то тексту. И всё? Да, это всё, для чего они нужны.

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

  • Проверять то, что вводит пользователь, чтобы быть уверенным в правильности данных (например, правильно ли пользователь ввёл email или ip-адрес).
  • Разбирать большой текст на меленькие кусочки (например, выбирать данные из большого лога).
  • Делать замены по шаблону (например, убирать непечатаемые символы из XML).
  • Показывать невероятную крутость тем, кто не знает регулярных выражений.

Большинство современных языков программирования и текстовых редакторов (по моему личному мнению) поддерживают регулярные выражения. Поддержим их и мы.

/Быть или не быть/ugi ¶

Синтаксис регулярных выражений прост и логичен. Он разделяется на символ-разделитель (он идёт в начале и конце выражения, обычно это /), шаблон поиска и необязательные модификаторы.

Формальный синтаксис такой:

Разделителем может быть любой символ, но обычно это / или

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

Давайте разберём выражение /Быть или не быть/ugi :

Данное регулярное выражение будет искать текст Быть или не быть не зависимо от регистра по всему тексту неограниченное количество раз. Модификатор u нужен для того, чтобы явно указать, что текст у нас в юникоде, то есть содержит символы, отличные от латиницы. Модификатор i включает регистронезависимый поиск. Модификатор g указывает поисковику идти до победного конца, иначе он остановится после первого удачного совпадения.

"Петя любит Дашу".replace(/Дашу|Машу|Сашу/, "Катю") ¶

Не трудно догадаться, что результатом работы js-выражения выше будет текст "Петя любит Катю" . Даже, если Петя неровно дышит к Маше или Саше, то результат всё равно не изменится.

Рассмотрим базовые спец. символы, которые можно использовать в шаблонах:

СимволОписаниеПример использованияРезультат
\Символ экранирования или начала мета-символа/путь\/к\/папке/Надёт текст путь/к/папке
^Признак начала строки/^Дом/Найдёт все строки, которые начинаются на Дом
$Признак конца строки/родной$/Найдёт все строки, которые заканчиваются на родной
.Точка означает любой символ, кроме перевода строки/Петя ..бит Машу/Найдёт как Петя любит Машу , так и Петя губит Машу
|Означает ИЛИ/Вася|Петя/Найдёт как Васю, так и Петю
?Означает НОЛЬ или ОДИН раз/Вжу?х/Найдёт Вжх и Вжух
*Означает НОЛЬ или МНОГО раз/Вжу*х/Найдёт Вжх , Вжух , Вжуух , Вжууух и т.д.
+Означает ОДИН или МНОГО раз/Вжу+х/Найдёт Вжух , Вжуух , Вжууух и т.д.

Помимо базовых спец. символов есть мета-символы (или мета-последовательности), которые заменяют группы символов:

СимволОписаниеПример использованияРезультат
\wБуква, цифра или _ (подчёркивание)/^\w+$/Соответствует целому слову без пробелов, например _Вася333_
\WНЕ буква, цифра или _ (подчёркивание)/\W\w+\W/Найдёт полное слово, которое обрамлено любыми символами, например @Петя@
\dЛюбая цифра/^\d+$/Соответствует целому числу без знака, например 123
\DЛюбой символ НЕ цифра/^\D+$/Соответствует любому выражению, где нет цифр, например Петя
\sПробел или табуляция (кроме перевода строки)/\s+/Найдёт последовательность пробелов от одного и до бесконечности
\SЛюбой символ, кроме пробела или табуляции/\s+\S/Найдёт последовательность пробелов, после которой есть хотя бы один другой символ
\bГраница слова/\bдом\b/Найдёт только отдельные слова дом , но проигнорирует рядом
\BНЕ граница слова/\Bдом\b/Найдёт только окночние слов, которые заканчиваются на дом
\RЛюбой перевод строки (Unix, Mac, Windows)/.*\R/Найдёт строки, которые заканчиваются переводом строки

Нужно отметить, что спец. символы \w, \W, \b и \B не работают по умолчанию с юникодом (включая кириллицу). Для их правильной работы нужно указывать модификатор u . К сожалению, на окончание 2019 года JavaScript не поддерживает регулярные выражения для юникода даже с модификатором, поэтому в js эти мета-символы работают только для латиницы.

Ещё регулярные выражения поддерживают разные виды скобочек:

ВыражениеОписаниеПример использованияРезультат
(. )Круглые скобки означают под-шаблон, который идёт в результат поиска/(Петя|Вася|Саша) любит Машу/Найдёт всю строку и запишет воздыхателя Маши в результат поиска под номером 1
(. )Круглые скобки с вопросом и двоеточием означают под-шаблон, который НЕ идёт в результат поиска/(?:Петя|Вася|Саша) любит Машу/Найдёт только полную строку, воздыхатель останется инкогнито
(?P<name>. )Задаёт имя под-шаблона/(?P<воздыхатель>Петя|Вася|Саша) любит Машу/Найдёт полную строку, а воздыхателя запишет в результат под индексом 1 и 'воздыхатель'
[abc]Квадратные скобки задают ЛЮБОЙ СИМВОЛ из последовательности (включая спец. символы \w, \d, \s и т.д.)/^[123]+$/Соответствует любому выражению 323323123 , но не 54321
[a-я0-9]Если внутри квадратных скобок указать минус, то это считается диапазоном/[A-Za-zА-Яа-яЁё0-9_]+/Аналог /\w/ui для JavaScript
[abc-]Если минус является первым или последним символом диапазона, то это просто минус/[0-9+-]+/Найдёт любое целое числое с плюсом или минусом (причём не обязательно, чтобы минус или плюс были спереди)
[^. ]Квадратные скобки с "крышечекой" означают любой символ НЕ входящий в диапазон/[^a-zа-я0-9 ]/iНайдёт любой символ, который не является буквой, числом или пробелом
[[:class:]]Квадратные скобки в квадратных скобках задают класс символов (alnum, alpha, ascii, digit, print, space, punct и другие)/[^[:print:]]+/Найдёт последовательность непечатаемых символов
Фигурные скобки с одним числом задают точное количество символов/\w+н\w+/uНайдёт слово, в котором две буквы н
Фигурные скобки с двумя числами задают количество символов от n до k/\w+н\w+/uНайдёт слово, в котором есть одна или две буквы н
Фигурные скобки с одним числом и запятой задают количество символов от n до бесконечности/\w+н\w+/uНайдёт слово, в котором н встречается от трёх и более раз подряд

Как правильно писать регулярные выражения ¶

Для примера возьмём валидацию ip-адреса. Первая мысль должна быть: "Я хочу валидировать ip-адрес. А что такое ip-адрес? Из чего он состоит?". Затем нужен список валидных и невалидных адресов:

Валидный адрес должен содержать четыре числа (байта) от 0 до 255. Если он содержит число больше 255, это уже ошибка. Если бы мы делали валидацию на каком-либо языке программирования, то можно было бы разбить выражение на четыре части и проверить каждое число отдельно. Но регулярные выражения не поддерживают проверки больше или меньше, поэтому придётся делать по-другому.

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

Теперь, зная все диапазоны байта, можно объединить их в одно выражение через вертикальную палочку | (ИЛИ):

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


Как видим, все байты стали зелёненькими. Это значит, что мы на верном пути.

Осталось дело за малым: сделать так, чтобы искать четыре байта, а не один. Нужно учесть, что байты разделены тремя точками. То есть мы ищем три байта с точкой на конце и один без точки:

Результат выглядит так:


Подсветились только валидные ip-адреса, значит регулярное выражение работает корректно.

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

Практическое применение регулярных выражений ¶

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

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

Шаблоны Dreamweaver основаны на комментариях HTML с определенными строками, обозначающими их назначение. Они являются ключевыми для меня, так как они обозначают начало и конец редактируемых областей на странице.

Как вы можете видеть из моего примера HTML, в исходном коде могут быть и другие комментарии.

Итак, начиная с простого, у меня есть следующее, которое соответствует всем открывающимся редактируемым тегам региона.

Так что теперь я хочу получить все между этим и следующим "

Можете ли вы сказать мне, почему это так? Я бы подумал, что не жадный захват (.*)? находится между моим уже работающим кодом и литералом

это соответствовало бы тому, что мне нужно.

2 ответа

Можем ли мы вычислить своего рода расстояние между регулярными выражениями ? Идея состоит в том, чтобы определить, каким образом два регулярных выражения похожи.

Мне нужно сопоставить следующую строку с регулярными выражениями в Java: Здравствуйте: $ $ И получить это: $ $ Я попробовал это: @Test public void testRegexMatch() < String regex = Pattern.quote($<) + .+ + Pattern.quote(>); String str = Hello.

Вы не хотите ставить круглые скобки вокруг .* .

Это означает жадно хватать все или нет.

Это означает лениво хватать все подряд:

Кроме того, в вашем regex у вас есть только один - в конечном токене. Измените его на этот:

Кстати, опасно иметь два .* в regex без атомной группы. При неожиданных данных вы можете получить катастрофическое отступление . Я бы рекомендовал изменить первый .*? на [^-]* . И, пока я этим занимаюсь, я предлагаю вам обращаться с whitespace более снисходительно:

Похожие вопросы:

Я столкнулся с этим вопросом в интервью: Учитывая два регулярных выражения, вычислите расстояние редактирования между ними. Расстояние редактирования определяется как наименьшее расстояние.

я работаю с mongodb и doctrine/mongodb-odm-bundle и пытаюсь построить такой запрос $matches = array(/^abc/, /^dbc/); $this->createQueryBuilder() ->field('field_name')->in($matches).

Мне просто нужно найти какой-то код и найти следующее, используя функцию Найти и заменить регулярными выражениями в Dreamweaver: <div anything can be in here </div> Я.

Можем ли мы вычислить своего рода расстояние между регулярными выражениями ? Идея состоит в том, чтобы определить, каким образом два регулярных выражения похожи.

Мне нужно сопоставить следующую строку с регулярными выражениями в Java: Здравствуйте: $ $ И получить это: $ $ Я попробовал это: @Test public void.

Мне нужно заблокировать папку с PCRE регулярными выражениями. Я использую Interarchy для зеркального отображения своих рабочих файлов через ftp, но он продолжает падать в папке _notes. Как.

Как следует из названия, как DFA и NFA связаны с регулярными выражениями? Так же, как изучение DFA и NFA быть полезны в том, чтобы лучше понять, в регулярных выражениях?

Являются ли Ruby регулярными выражениями PCREs и/или POSIX-совместимыми базовыми/расширенными регулярными выражениями?

может ли кто-нибудь объяснить разницу между этими двумя регулярными выражениями: re.search('^[abcd]z$', noun) и re.search('[^abcd]z$', noun) Спасибо!

Я новичок в регулярных выражениях и не знаю, как найти специальные символы с регулярными выражениями. У меня есть такая струна listofwords= hello there i'd like to find *JDK? in this sentence как.

ГЛАВА 2.2. Основные принципы работы с Dreamweaver

А теперь давайте выясним, какие средства Dreamweaver предлагает тем, кто знаком с языком HTML.

Прежде всего, вы можете переключиться в режим отображения исходного кода HTML, нажав крайнюю левую кнопку из показанных на рис. 2.13. Также вы можете воспользоваться пунктом Code или Switch View меню View.

Кроме того, создатели Dreamweaver предусмотрели возможность просмотра исходного HTML-кода в панели, называемой Code Inspector (рис. 2.18). Чтобы вызвать ее на экран, выберите в меню Window пункт Others и в появившемся на экране подменю — пункт Code Inspector. Но проще всего нажать клавишу <F10>.

Панель Code Inspector

Рис. 2.18. Панель Code Inspector

Окно мини-редактора HTML

Рис. 2.19. Окно мини-редактора HTML

Если вам нужно вставить в текст Web-страницы какой-либо тег с содержимым, поставьте в это место текстовый курсор и выберите в контекстном меню пункт Insert Tag. На экране также появится окно мини-редактора, на этот раз пустое (рис. 2.20).

Вы спросите: а что это за странный список, в котором перечислены непонятные слова? Это одна из замечательных возможностей, появившаяся в Dreamweaver MX — подсказка по коду. Как только вы поставите где-либо в коде HTML значок <, как Dreamweaver отобразит список, в котором перечислены все теги HTML. Если вы нажмете на клавиатуре какую-либо буквенную клавишу, в списке появятся только теги, начинающиеся на эту букву. Чтобы выбрать нужный тег в списке, выделите его и нажмите клавишу <Enter> или просто щелкните по нему мышью.

Окно мини-редактора при вставке нового тега

Рис. 2.20. Окно мини-редактора при вставке нового тега

Введите в окно мини-редактора весь код, который вы хотите вставить (рис. 2.21), и нажмите клавишу <Enter>. Он будет помещен на то самое место, где стоит текстовый курсор.

Окно мини-редактора с новым кодом HTML, который будет вставлен в страницу

Рис. 2.21. Окно мини-редактора с новым кодом HTML, который будет вставлен в страницу

И, наконец, вы можете "завернуть" любой выделенный фрагмент текста в тег HTML. Для этого выделите нужный текст и выберите в контекстном меню пункт Wrap Tag. Введите в появившемся окне нужный тег со всеми нужными атрибутами и нажмите клавишу <Enter>. Дело сделано!

Вообще-то существует еще пункт Quick Tag Editor меню Modify и кнопка в редакторе свойств, но лучше ими не пользоваться. По какому принципу они работают, знают, наверное, только программисты фирмы Macromedia. Поэтому пользуйтесь лучше контекстным меню окна документа — так надежнее.

Чтобы удалить тег, в который "завернут" какой-либо фрагмент текста, поставьте в него текстовый курсор и выберите в контекстном меню пункт Remove Tag <тег>. Dreamweaver удалит этот тег, но оставит его содержимое, которое "вольется" в содержимое родительского тега.

Если вы пока еще плохо знаете теги HTML, не беда. Dreamweaver MX идет вам на помощь, предоставляя несколько новых инструментов для правки уже существующих и вставки новых тегов, которые наверняка понравятся неопытным пользователям.

Прежде всего, это диалоговое окно правки тега. Выделите целиком содержимое какого-либо тега, воспользовавшись секцией тегов строки статуса (рис. 2.12). После этого выберите пункт Edit Tag <тег>. На экране появится диалоговое окно, показанное на рис 2.22.

Диалоговое окно правки тега

Рис. 2.22. Диалоговое окно правки тега

Пользуясь этим окном и своим знанием английского, вы можете в удобной форме задавать значения различных атрибутов выбранного тега. В левом списке выберите одну из категорий атрибутов, и в правой части окна появятся соответствующие элементы управления. Вы также можете щелкнуть "потайную" кнопку Tag Info, выглядящую как обычная надпись, после чего в окне правки тега появится краткая подсказка по выбранному тегу. Закончив правку, нажмите кнопку ОК, чтобы сохранить все изменения, или кнопку Cancel, чтобы отказаться от них.

В верхней части этой панели находится иерархический список тегов, присутствующий в открытой Web-странице. В нижней части панели располагается список атрибутов выбранного в иерархическом списке тега и их значений. Вы выбираете нужный тег и правите значения его атрибутов в нижнем списке, а в окне документов тут же отображаются все заданные вами изменения. Удобно, не правда ли?

Кстати, нажав расположенную в правом нижнем углу панели Tag Inspector кнопку Edit <тег> Tag, вы вызовете уже знакомое вам диалоговое окно правки тега. Эта кнопка показана на рис. 2.24.

Панель Tag Inspector

Рис. 2.23. Панель Tag Inspector

Кнопка Edit <тег> Tag

Рис. 2.24. Кнопка Edit <тег> Tag

Кнопка Tag Chooser

Рис. 2.25. Кнопка Tag Chooser

С помощью другого диалогового окна вы можете поместить на страницу какой-либо тег или "завернуть" в него выделенный фрагмент текста. Для этого служит диалоговое окно Tag Chooser. Чтобы его вызвать, вам нужно выполнить одно из следующих действий:

  • выбрать пункт Tag меню Insert или нажать комбинацию клавиш <Ctrl>+<E>;
  • выбрать пункт Insert Tag контекстного меню окна документа (действует только тогда, когда окно документа находится в режиме отображения HTML-кода);
  • нажать кнопку Tag Chooser, находящуюся на вкладке Common панели объектов (рис. 2.25).

Само окно Tag Chooser показано на рис. 2.26.

В иерархическом списке тегов, расположенном слева, вы можете выбрать категорию тегов. (В данный момент нам, вероятнее всего, понадобится категория, обозначенная ветвью HTML Tags списка.) Как только вы выберете нужную категорию тегов, в правом списке появятся все теги, относящиеся к этой категории. Вам останется только выбрать тег и нажать кнопку Insert, чтобы вставить его в страницу.

Диалоговое окно Tag Chooser

Рис. 2.26. Диалоговое окно Tag Chooser

Сразу после нажатия кнопки Insert на экране появится уже знакомое вам диалоговое окно правки тега, в котором вы сможете задать значения атрибутов выбранного тега. Сам тег будет вставлен только после нажатия кнопки ОК окна правки тега. Заодно Dreamweaver сам переключит окно документа в режим отображения страницы и кода, чтобы вы могли видеть, где вставленный вами тег начинается и где он заканчивается.

Если вы щелкнете по кнопке Tag Info диалогового окна Tag Chooser, в этом окне появится краткое описание выбранного вами тега. Учтите, что при этом оба списка "съежатся", чтобы освободить место.

Если вы перед вызовом окна Tag Chooser выделите какой-либо фрагмент текста вместо того, чтобы просто поставить в какое-то его место текстовый курсор, то выделенный текст будет "завернут" во вновь вставленный тег. Как видите, Dreamweaver ведет себя достаточно "разумно", если так можно сказать об обычной программе.

Заметьте, что после вставки любого тега окно Tag Chooser останется на экране, так что вы сможете сразу же вставить новый тег. Еще обратите внимание, что это диалоговое окно является немодальным, т. е. оно не препятствует доступу к любым другим окнам программы. (Абсолютное большинство других диалоговых окон Dreamweaver являются модальными, запрещающими пользователю доступ к остальным окнам программы, пока данное диалоговое окно не будет закрыто.) Чтобы закрыть окно Tag Chooser, нажмите кнопку Close.

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

Выберите пункт Find and Replace меню Edit или нажмите комбинацию клавиш <Ctrl>+<F>. На экране появится окно Find and Replace, показанное на рис. 2.27. Обратите внимание, что это также немодальное диалоговое окно, т. е. вы не потеряете доступ к окну документа.

Диалоговое окно Find and Replace

Рис . 2.27. Диалоговое окно Find and Replace

Всплывающее меню Search For позволяет задать, в каком тексте нужно произвести поиск: в тексте страницы (пункт Text), в "сыром" HTML-коде (Source Code), в тексте страницы, но более хитрым образом (Text (Advanced)), или в тексте заданного тега (Specific Tag). Если выбраны первые два пункта, то искомый текст (подстрока) вводится в текстовое поле Search For, а текст, на который нужно заменить искомый, — в текстовое поле Replace With.

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

Диалоговое окно Find and Replace (выбран режим "хитрого" поиска)

Рис. 2.28. Диалоговое окно Find and Replace (выбран режим "хитрого" поиска)

Если же вы выберете пункт Text (Advanced), в окне поиска и замены кое-что добавится (рис. 2.28). Это будет новая группа элементов управления, состоящая из двух кнопок и двух раскрывающихся списков, позволяющих задать, внутри какого тега будет искаться тот или иной текст.

Раскрывающийся список, находящийся справа, задает тег, в котором будет искаться текст. А раскрывающийся список, находящийся слева, задает, где будет производиться поиск: внутри этого тега (пункт Inside Tag) или вне его (Not Inside Tag). Если вам нужно искать текст внутри (или вне) нескольких тегов, то, щелкая кнопку со значком плюса, вы можете добавить сколько угодно таких групп элементов управления. Соответственно, кнопка со значком минуса удаляет группу элементов, в которой она расположена.

Но самые мощные возможности Dreamweaver предоставляет для поиска и замены тегов, для чего достаточно выбрать пункт Specific Tag всплывающего меню Search For. В окне поиска и замены появится группа элементов управления для задания параметров поиска и еще одна группа — для задания параметров замены (рис. 2.29).

Искомый тег выбирается в раскрывающемся списке, расположенном правее всплывающего меню Search For. Если вы хотите искать любой тег, выберите пункт [any tag].

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

  • With Attribute — содержащие атрибут, заданный в следующем раскрывающемся списке (в порядке слева направо). В третьем раскрывающемся списке задается знак сравнения ("равно", "больше", "меньше" или "не равно"), а в четвертом — значение искомого атрибута или [any value], если нужно найти атрибут, имеющий любое значение;

Диалоговое окно Find and Replace (выбран режим поиска тега)

Рис. 2.29. Диалоговое окно Find and Replace (выбран режим поиска тега)

  • Without Attribute — не содержащие атрибут, заданный в следующем раскрывающемся списке;
  • Containing — содержащие внутри себя заданный текст или тег. Если необходимо найти текст, выберите пункт Text во втором всплывающем меню, а в поле ввода справа от него введите сам текст. Если нужно найти тег, выберите пункт Specified Tag во втором раскрывающемся списке, а в третьем — выберите сам тег;
  • No Containing — не содержащие внутри себя заданный текст или тег;
  • Inside Tag — находящиеся внутри тега, заданного во втором раскрывающемся списке;
  • No Inside Tag — не находящиеся внутри тега, заданного во втором раскрывающемся списке.

Кнопки со знаками "плюс" и "минус" вам уже знакомы. Так что сразу перейдем к следующей группе элементов управления.

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

Раскрывающийся список Action задает действие, производимое над найденным тегом. А сделать с ними можно следующее:

  • Replace Tag & Contents — заменить найденный тег на другой, введенный в области редактирования, расположенной правее;
  • Replace Contents Only — заменить содержимое найденного тега на другое, введенное в области редактирования, расположенной правее;
  • Remove Tag & Contents — удалить найденный тег вместе с содержимым;
    Strip Tag — удалить тег, но оставить содержимое;
  • Change Tag — изменить тег на другой, выбранный в расположенном правее раскрывающемся списке, но оставить прежнее содержимое;
  • Set Attribute — установить атрибут, выбранный во втором раскрывающемся списке (в порядке слева направо), со значением, заданным в комбинированном списке То;
  • Remove Attribute — удалить атрибут, выбранный во втором раскрывающемся списке;
  • Add Before Start Tag — добавить перед начальным тегом текст, введенный в текстовом поле;
  • Add After End Tag — добавить после конечного тега текст, введенный в текстовом поле;
  • Add After Start Tag — добавить после начального тега текст, введенный в текстовом поле;
  • Add Before End Tag — добавить перед конечным тегом текст, введенный в текстовом поле.

Флажок Match Case предписывает Dreamweaver учитывать регистр символов при поиске. По умолчанию он отключен, т. е. регистр символов при поиске не учитывается.

Флажок Ignore Whitespace Differences предписывает Dreamweaver считать несколько расположенных подряд пробелов за один. По умолчанию он включен.

Флажок Use Regular Expressions включает обработку регулярных выражений. Регулярные выражения — это своего рода шаблоны, по которым Dreamweaver будет искать и заменять сложные последовательности символов. Мы особо опишем их использование — настолько это мощное средство.

Но как теперь запустить сам поиск (замену)?

Вы можете щелкнуть на кнопке Find Next — и первое вхождение найденной последовательности символов (подстроки) будет выделено в окне документа. Чтобы найти следующую подстроку, опять щелкните на кнопке Find Next или, если окно Find and Replace уже закрыто, нажмите клавишу <F3> (при активном окне документа) или выберите пункт Find Next в меню Edit. Аналогично работает кнопка Replace: при ее нажатии выделяется первая найденная подстрока, а при последующих нажатиях ранее выделенная подстрока заменяется заданной и выделяется следующая найденная подстрока. После того как все подстроки будут заменены, Dreamweaver выдаст окно-предупрежение с указанием, сколько замен было произведено.

Чтобы заменить сразу все подстроки, нажмите кнопку Replace All.

Вы также можете сразу найти все вхождения подстроки в тексте страницы, нажав кнопку Find All. Конечно, Dreamweaver сразу не сможет все их выделить — это не сможет сделать ни одно Windows-приложение. Поэтому он использует другой подход. На экране появляется панель Search (рис. 2.30), содержащая список, в котором представлены все найденные подстроки. При двойном щелчке мышью на любой его позиции в окне документа будет выделена соответствующая подстрока.

Панель Search

Рис. 2.30. Панель Search

А теперь давайте представим себе такую ситуацию. Вы задали какое-то сложное условие поиска (и, возможно, замены) и теперь хотите сохранить его для дальнейшего использования или на память потомкам. Как это сделать? Очень просто: Dreamweaver предоставляет вам и такую возможность. Просто щелкните на кнопке с изображением дискеты в окне Find and Replace, после чего на экране появится стандартное диалоговое окно сохранения файла Windows, где вы сможете задать имя вновь создаваемого файла или выбрать для перезаписи уже существующий. А чтобы загрузить сохраненное ранее в файле условие, щелкните на кнопке с изображением папки; на экране появится стандартное диалоговое окно открытия файла Windows, где вы сможете выбрать нужный файл условия.

Как и было обещано, сейчас мы познакомимся с регулярными выражениями. Чем же они могут нам помочь?

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

Ну и как оно вам? Больше похоже на бессмысленный набор символов, в котором с трудом угадывается что-то знакомое. Признаться, автор и сам сначала с трудом в них разбирался. Ему помогала вот такая табличка — см. табл. 2.1.


Регулярные выражения (regex или regexp) очень эффективны для извлечения информации из текста. Для этого нужно произвести поиск одного или нескольких совпадений по определённому шаблону (т. е. определённой последовательности символов ASCII или unicode).

Области применения regex разнообразны, от валидации до парсинга/замены строк, передачи данных в другие форматы и Web Scraping’а.

Давайте начнём с нескольких примеров.

Якоря — ^ и $

Квантификаторы — * + ? и <>

Оператор ИЛИ — | или []

Символьные классы — \d \w \s и .

Используйте оператор . с осторожностью, так как зачастую класс или отрицаемый класс символов (который мы рассмотрим далее) быстрее и точнее.

У операторов \d , \w и \s также есть отрицания ― \D, \W и \S соответственно.

Например, оператор \D будет искать соответствия противоположенные \d .

Непечатаемые символы также можно искать, например табуляцию \t , новую строку \n , возврат каретки \r .

Флаги

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

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

  • g (global) ― не возвращает результат после первого совпадения, а продолжает поиск с конца предыдущего совпадения.
  • m (multi line) ― с таким флагом, операторы ^ и $ вызовут совпадение в начале и конце строки ввода (line), вместо строки целиком (string).
  • i (insensitive) ― делает выражение регистронезависимым (например, /aBc/i соответствует AbC).

Скобочные группы ― ()

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

Если присвоить группам имена (используя (?<foo>. ) ), то можно получить их значения, используя результат сопоставления, как словарь, где ключами будут имена каждой группы.

Скобочные выражения ― []

Помните, что внутри скобочных выражений все специальные символы (включая обратную косую черту \ ) теряют своё служебное значение, поэтому нам ненужно их экранировать.

Жадные и ленивые сопоставления

Квантификаторы ( * + <> ) ― это «жадные» операторы, потому что они продолжают поиск соответствий, как можно глубже ― через весь текст.

Например, выражение <.+> соответствует <div>simple div</div> в This is a <div> simple div</div> test . Чтобы найти только тэг div ― можно использовать оператор ? , сделав выражение «ленивым»:

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

Границы слов ― \b и \B

\b ― соответствует границе слова, наподобие якоря (он похож на $ и ^ ), где предыдущий символ ― словесный (например, \w ), а следующий ― нет, либо наоборот, (например, это может быть начало строки или пробел).

\B ― соответствует несловообразующей границе. Соответствие не должно обнаруживаться на границе \b .

Обратные ссылки — \1

Опережающие и ретроспективные проверки — (?=) and (?<=)

Вы можете использовать оператор отрицания !

Как вы могли убедиться, области применения регулярных выражений разнообразны. Я уверен, что вы сталкивались с похожими задачами в своей работе (хотя бы с одной из них), например такими:

Читайте также: