Поиск/замена по регулярным выражениям.

  • Автор темы Автор темы Strizh
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Strizh

Топикстартер
15 лет на форуме
Сообщения
982
Реакции
92
Есть желание написть плагин для сабжа.
проект будет Open Source, желающие помочь есть?
 
Ответ: Поиск/замена по регулярным выражениям.

Как в ворде?
Тестингом если только...
 
Ответ: Поиск/замена по регулярным выражениям.

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

Стучи
 
Ответ: Поиск/замена по регулярным выражениям.

Эх... кабы я еще программировать умел на чем-то кроме дельфей.

Жаль. А то бы помог. Уж очень не хватает Индизу регулярных выражений.
 
Ответ: Поиск/замена по регулярным выражениям.

Это будет плагин или скрипт.
На чем писать хотите?
 
Ответ: Поиск/замена по регулярным выражениям.

Жаль. Я скриптист. Но если что пишите. Может алгоритм, может тест, может интерфейс, чем смогу тем помогу.
 
Ответ: Поиск/замена по регулярным выражениям.

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

Я знаю. Читал. Но дальше дело не пошло. С++ так и не домучил :(
А на VB давно подсел, очень помогает.

Могу по юзабилити интерфейса помочь. Работаю в издательстве. Тест материалов куча от классики до тех.литературы
 
Ответ: Поиск/замена по регулярным выражениям.

А разве это нужно _пользователям_? Давай несколько аргументов с реальными примерами.
 
Ответ: Поиск/замена по регулярным выражениям.


Не по теме:
Наш пострел везде поспел

Вот ты верстал когда нибудь? Ты же даже не знаешь как текстовый фрейм без СДК создать.
А реальных примеров наберется.
И начальников не надо.
 
Ответ: Поиск/замена по регулярным выражениям.

А разве это нужно _пользователям_? Давай несколько аргументов с реальными примерами.
http://regexpstudio.com/RU/TRegExpr/Help/regexp_syntax.html
Куча примеров.

Не менее красноречива справка для Total Commander 6.54:

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

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

Total Commander поддерживает регулярные выражения в следующих функциях:
- Команды - Поиск файлов (в имени и содержимом файла).

- Во внутренней программе просмотра.
- В инструменте группового переименования.
- При выделении файлов по маске.

Регулярные выражения состоят из обычных символов и специальных символов, так называемых метасимволов. Следующие символы - это метасимволы или их начальные части:
. \ ( ) [ ] { } ^ $ + * ? (кроме того, только в определении множеств символов: - ).

Обычные символы

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

Пример:

тест находит строку "тест" в исследуемом тексте. Обратите внимание: "тест" при этом обнаруживается В ЛЮБОМ МЕСТЕ имени файла или текстовой строки.

Escape-последовательности

Escape-последовательность начинается с обратной косой черты \.

Варианты Escape-последовательностей:

\t Символ табуляции.
\xnn Символ с шестнадцатеричным ASCII-кодом nn. Пример: \x20 - символ пробела. Таблица символов Windows (если она установлена, её запускаемый файл - charmap.exe) показывает символьные коды большинства специальных символов. Вы можете использовать калькулятор Windows в инженерном режиме для преобразования десятичных значений в шестнадцатеричные.
\[ Левая квадратная скобка. Поскольку квадратные скобки - метасимволы, они должны быть записаны как \[ для поиска их в целевой строке.

\\ Найти обратную косую черту.
\. Найти точку (символ "." является метасимволом и служит для поиска произвольного символа, см. ниже).
Примеры:

В\x20начале находит 'В начале' (обратите внимание на пробел).
\tВначале находит 'Вначале' с предшествующей табуляцией.

Множества символов

Символы в квадратных скобках задают множества символов. Будет найден ровно один символ из перечисленных. Чёрточка позволяет определять группы, например, [a-z] - это все 26 малых латинских букв. При указании ^ в качестве первого символа множества идёт поиск всех символов, кроме перечисленных.

Если необходимо включить во множество саму чёрточку, поместите её в начало или конец списка или предварите символом обратной косой черты: '\-'. Если необходимо добавить во множество сам символ ']', поместите его в самое начало или, точно так же, поставьте перед ним обратную косую черту: '\]'.

Примеры:

[аеиоу] Находит ровно одну из перечисленных гласных.
[^аеиоу] Находит любой символ, кроме этих гласных.
M[ae][iy]er Находит фамилию "Meier" во всех возможных способах написания: Mayer, Meyer, Maier, Meier. Очень полезно, если вы не можете вспомнить точное написание имени.

Метасимволы

Вот список наиболее важных метасимволов:

^ Начало строки.
$ Конец строки.
. Любой символ.
\w Алфавитно-цифровой символ или знак подчёркивания '_'.
\W Дополнение к \w, т.е. любой символ, кроме алфавитно-цифровых и подчёркивания.
\d Цифра.
\D Дополнение к \d (не цифра).
\s Разделитель между словами (пробел, табуляция и пр.).
\S Дополнение к \s (любой символ, кроме разделителей).
\b Указывает границу слова.
\B Указывает, что данная позиция не является границей слова.

Метасимвол границы слова (\b) означает, что в том месте, где он находится, обязательно должно быть либо начало, либо конец слова. Метасимвол \B, напротив, означает, что в указанном месте границы слова быть не должно.

Пример:

Выражение abc\b найдёт подстроку 'abc' в строке 'xabc def' и не найдёт ничего в строке 'xabcdef'. Выражение abc\B, наоборот, ничего не найдёт в 'xabc def' и обнаружит подстроку 'abc' в строке 'xabcdef'.

Итераторы

Итераторы (метасимволы повторов) используются для повторения символа или выражения, находящегося слева от итератора.

* Ноль или более вхождений, то же что и {0,}.
? Ноль или одно вхождение, то же что и {0,1}.
+ Одно вхождение или более, то же что и {1,}.
{n} Ровно n вхождений.
{n,} Не менее n вхождений
{n,m} Не менее n и не более m вхождений.

Все эти операторы "жадные". Это означает, что они захватывают максимально возможное число символов. Размещение вопросительного знака ? после оператора делает его "не жадным", то есть захватывающим символы не более необходимого минимума.

Пример: 'b+', как и 'b*', применённые ко входной строке 'abbbbc' найдут 'bbbb', в то время как 'b+?' найдёт только 'b', а 'b*?' - вообще пустую строку; 'b{2,3}' найдёт 'bbb', в то время как 'b{2,3}?' найдёт 'bb'.

Если фигурные скобки встречаются в "неправильном" месте, где они не могут быть восприняты как итератор, то они воспринимаются как обычные символы.

Варианты

Варианты (альтернативы) помещаются в круглые скобки и разделяются вертикальной чертой.

В качестве первого варианта воспринимается всё от предыдущего метасимвола "(" или "[" или от начала выражения до первого метасимвола "|", в качестве последнего - всё от последней вертикальной черты "|" до конца выражения или до ближайшего метасимвола ")".

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

Пример: по вариантам (Иоанн|Иаков|Пётр) обнаруживается одно из имён: Иоанн, Иаков или Пётр.

Следует знать, что метасимвол "|" воспринимается как обычный символ внутри множеств символов. Например, [бак|бок|бук] означает ровно то же самое что и [баоук|].

Подвыражения для поиска+замены

Текстовые фрагменты в круглых скобках считаются подвыражениями. Подвыражения нумеруются слева направо, в порядке появления открывающих скобок.

Пример:

Чтобы поменять местами заголовок и пояснение в имени mp3-файла, когда они разделены чёрточкой (Заголовок - Пояснение.mp3), можно поступить следующим образом:

Найти: (.*) - (.*)\.mp3

Заменить на: $2 - $1.mp3

Здесь $1 означает текст в первых скобках, а $2 - текст во вторых скобках.

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

\n Указывает на повторное вхождение подвыражения номер n. Здесь n - число от 1 до 9.

Примеры:
(.)\1+ Находит, например, 'aaaa' и 'cc'.
(.+)\1+ Находит, например, 'abab' (где в первый раз 'ab' находится посредством .+ и во второй - посредством \1+ ) и '123123'.

Модификаторы

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

(?i) Отключает проверку верхнего/нижнего регистра. В Total Commander это значение включено по умолчанию для имён файлов.
(?-i) Включает проверку регистра.
(?g) Переключение на "жадный" режим (активно по умолчанию).
(?-g) Выключение "жадного" режима, после чего "+" будет означать то же, что и "+?".
 
Ответ: Поиск/замена по регулярным выражениям.

to Strizh

.. есть у меня дельфийский юнит, экспортирующий обжект, реализующий собственный алгоритм поиска по регулярным выражениям. Сконвертить в С можно..
НО..
..есть проблем - юнит писал для коммерческого проекта. Если до коммерческого релиза дело не дойдет (тьфу-тьфу), могу завещать сей модуль лично Вам или тулбоксу.
 
Ответ: Поиск/замена по регулярным выражениям.

Dr.Caligari

Собственный алгоритм, это как? Насколько я помню и понимаю там должны автоматы строится. Впрочем библиотек поиска по RegExp'ам выше крыши.
 
Ответ: Поиск/замена по регулярным выражениям.

banIDit сказал(а):
Для чего нужны регэкспы я знаю, поверь. Я говорил о примерах того, как дизайнеры, а не программисты, будут их использовать. Дизайнер дизайнеру естественно рознь, но мое личное мнение такое : 99% их в глаза не видели.
Те кому необходимо была обработка документов regex-ами, были в состоянии написать скрипт не вникая в SDK. И не стоит рассказывать о том, что скрипт это долго.
 
Ответ: Поиск/замена по регулярным выражениям.

Strizh сказал(а):
Вот ты верстал когда нибудь?

Ты сам знаешь ответ :)

Strizh сказал(а):
А реальных примеров наберется.

Стриж, в повседневной работе дизайнера regexp нафик не нужен. Зачем еще одинь мертвый open source project?
Хочешь просто потратить свое время - так и скажи. Хочешь делать продукт, который пригодится больше 1% целевой аудитории, думай головой.

Strizh сказал(а):
И начальников не надо.

А вот зря ты как сразу :-) В хорошем проэкте начинается все с теамлида, а не с кодера
 
Ответ: Поиск/замена по регулярным выражениям.

Dr.Caligari сказал(а):
есть у меня дельфийский юнит, экспортирующий обжект, реализующий собственный алгоритм поиска по регулярным выражениям.

Еще один изобретатель велосипедов... 'P:E'
ВСЕ УЖЕ УКРАДЕНО, запомни это :E]
 
Ответ: Поиск/замена по регулярным выражениям.

ssyabr сказал(а):
Стриж, в повседневной работе дизайнера regexp нафик не нужен. Зачем еще одинь мертвый open source project?
Хочешь просто потратить свое время - так и скажи. Хочешь делать продукт, который пригодится больше 1% целевой аудитории, думай головой.
Что-то ты разошёлся!

В Microsoft Word'е тоже regexp'ы нафиг не нужны? Тебе нужно письмо Биллу Гейтсу написать. Чтобы он тоже "головой думал".

Кроме дизайнеров у нас что, больше никто не пользуется InDesign'ом? Обычно в любом отделе предпечатной подготовки есть более-менее грамотный человек.
Те кому необходимо была обработка документов regex-ами, были в состоянии написать скрипт не вникая в SDK. И не стоит рассказывать о том, что скрипт это долго.
НЕТ!
 
Статус
Закрыто для дальнейших ответов.