Регулярные выражения в ЕдитПлюс EditPlus, regular expressions
главная \ веб-дизайн \ регулярные выражения в едитплюс

предыдущая регулярные выражения следующая

Дата: 11.10.2002

Регулярные выражения в EditPlus

Регулярные выражения(regular expressions) есть во многих языках программирования.

Регулярное выражение представляет собой образец - шаблон - который сопоставляется со строкой.

Вот что написано в справке самого ЕдитПлюс:

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

Например, вы можете найти любую цифру использую регулярное выражение "[0-9]". Таким же образом вы можете найти любой НЕ цифровой символ использую регулярное выражение "[^0-9]".

EditPlus поддерживает следующие регулярные выражения в строках "Найти", "Заменить" и в "Найти в файлах" командах.

Описания выражения
\t   Tab character.
\n    Новая линия.
.    Подходит под любой символ.
|    Либо выражение в левой стороне, либо в правой стороне подходит под нужную строку. Например, "a|b" подходит к "a" и к "b".
[]    Любой из символов в скобочках может подходить под искомый символ. Например "[ab]" подходит под "а" и под "b". "[0-9]" подходит под любой символ.
[^]    Ни один из символов в скобочках не подходит под искомый символ. Например "[^ab]" подходит ко всем символам КРОМЕ "а" и "b". "[^0-9]" подходит ко всем не-цифрам.
*    символ слева от звездочки в выражении должен встречаться 0 или более раз. Например "be*" подходит под "b", "be" и "bee".
+    символ слева от знака плюс означает в регулярном выражении, что этот символ должен встречаться 1 или более раз. Например "be+" подходит под "be" и "bee", но не "b".
?    символ слева от знака вопрос означает что символ встречается 0 или 1 раз. Например "be?" подходит под "b" и "be" но не "bee".
^    выражение справа от знака ^ подходит только если оно находится в начале строки. Например "^A" подходит только если находиться вначале сттроки.
$    выражение слева от знака $ подходит только если оно находиться в конце строки. Например "e$" подходит к "e" в самом конце строки.
()    влияет на оценку порядка выражения и также используется для выражений, взятых в скобки.
\    избегающий символ. Если вы хотите использовать сам символ "\", вам следует использовать "\\".

Выражение в скобочках беруться в скобочки - (). К взятим в скобки выражениям можно обратиться, используя \0, \1, \2, \3, и т.д. \0 показывает выражение в скобочках, отображающее целую подстроку, которая подошла. \1 указывает на первое выражение в скобочках, \2 - на второе, и т.д. Смотрите следующие примеры.

Original	Search 	Replace 	Result  
abc     	(ab)(c)	\0-\1-\2	abc-ab-c 
abc     	a(b)(c)	\0-\1-\2	abc-b-c 
abc     	(a)b(c)	\0-\1-\2	abc-a-c

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

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

Пример1

Ко мне иногда приходят длинные письма, на которые я отвечаю, вставляя в это письмо свои комментарии - ответы. Проблема в том, что нажал на кнопочку "Ответить на письмо" текст почему-то сильно растягивается по ширине, и перестает помещаться на экране, возникает горизонтальная полоса прокрутки... Единственный выход - вручную подгонять текст, чтобы он помещался на экране. Если письмо ОЧЕНЬ большое, то надо минут 15 только заниматься этой утомительной работой.

А человек существо ленивое... и как говорила птичка страусу, "лучше 3 дня учиться летать, а потом за день долететь, чем 3 дня бежать".

Выход: использование регулярных выражений.
Размышления: все просто, примерно 45 символов вполне помещаются на экран моего монитора, НО их может быть немножко больше, НО надо чтобы не было разрыва слов, т.к. это не красиво.

Решения прошли следующие стадии:
1) шаблон для длинных писем
^(......................................................)[ ]+

2) тоже вроде бы неплохо
^(......................................)(.*)[ ]+
3) почти идеально
^(......................................)[^ ,/.]*[ ,/.]+

Не буду вспоминать почему плохо подходят первые два шаблона, скажу почему подходит последний - потому что подошел. :)

Регулярное выражение должно обладать некими зачатками интеллекта, быть гибким... Вначале следует определенное колличество любых символов в начале строки, потом НЕ ДОЛЖНО БЫТЬ символов пробела, запятой или точки. Таких симвлов должно быть 0 или более раз. А далее как раз должен следовать один из этих же символов(1 или более символов).

Все это заменяется на:
\0\n

(Кстати если надо текст обычный сделать так, чтобы впереди каждой строчки был например словосочетание k> надо использовать регулярное выражение ^([^K][^>]) на K> \0)

Пример 2

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

Когда я писал "описание выражения" чуть выше в этой статье, html-код вначале выглядел так:
\t&nbsp;&nbsp;&nbsp;Tab character.<br>
\n&nbsp;&nbsp;&nbsp; Новая линия.<br>
.&nbsp;&nbsp;&nbsp; Подходит под любой символ.<br>

С помощью css я хотел сделать выделение самого специального символа желтым цветом. Для этого надо было назвачить тэгу span какой-нибудь стиль, например .haha. Проблема в том, чтобы сделать это НЕ в ручную, так, чтобы html-код приобрел следующий вид:

<span class=haha>\t</span>&nbsp;&nbsp;&nbsp;Tab character.<br>
<span class=haha>\n</span>&nbsp;&nbsp;&nbsp; Новая линия.<br>
<span class=haha>.</span>&nbsp;&nbsp;&nbsp; Подходит под любой символ.<br>

Для решения этой задачи подошло следующее регулярное выражение:

Регулярное выражение:
^(..?[^&]?)(&nbsp;)
на
<span class=haha>\1</span>\2

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

Пока все.


предыдущая веб-дизайн следующая