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

Russian main discussion
  • Author
  • Message
YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

InFive wrote: а как научиться составлять подобные функции?
Ну, функции, они во многих языках схожи, различия только в синтаксисе и операторах...
Скажем, в данном случае использовалась функция условного блока:

Code: Select all

if (<здесь какое-либо условие с итоговым выводом TRUE или FALSE>) {
   Здесь набор команд, выполняемых при выводе условия в TRUE
} else {
   Здесь набор команд, выполняемых при выводе условия в FALSE 
}
как-то так.
А вот, что будет использоваться в качестве условия, уже выбирается regexp-ом.

Синтаксис изучать надо JScript (не одно и то же, что javascript, хоть и похожи), ссылки на оффлайновые книжки где-то здесь на форуме публиковали, также можно на msdn msdn почитать. В двух словах всего не рассказать...

ЗЫ Что-то с парсером на форуме, BB коды URL не работают...
Last edited by YuS on Wed Mar 22, 2017 4:11 pm, edited 2 times in total.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

YuS wrote:ЗЫ Что-то с парсером на форуме, BB коды URL не работают...
Работают, но скобки внутри ссылок на дух не переносят.
Last edited by opk44 on Tue Sep 18, 2018 6:02 am, edited 2 times in total.

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

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

Code: Select all

(.+)
если писать (.+) в скрипте TextReplace.js, то выполняется без проблем, а если писать в пакетном файле для TextReplace.js, то не выполняется...

то есть, как прописать правильно (.+) в пакетном файле для скрипта TextReplace.js?

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

InFive
Предоставленных данных для тестирования недостаточно.
Может дело просто в трактовке переводов строк?
Т.е. учитывается ли, например, флаг "n" в batch-файле?

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

opk44 wrote:InFiveМожет дело просто в трактовке переводов строк?
Т.е. учитывается ли, например, флаг "n" в batch-файле?
да, в batch-файле флаг "n" я ставлю

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

InFive wrote:ребят, подскажите другой вариант написания группы для поиска неопределенного количества любых символов вместо

Code: Select all

(.+)
если писать (.+) в скрипте TextReplace.js, то выполняется без проблем, а если писать в пакетном файле для TextReplace.js, то не выполняется...

то есть, как прописать правильно (.+) в пакетном файле для скрипта TextReplace.js?
Если не выполняется, то это баг и KDJ поправит его, но для этого, как сказали выше, необходимо больше информации...

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

YuS wrote: Если не выполняется, то это баг и KDJ поправит его, но для этого, как сказали выше, необходимо больше информации...
KDJ крайне редко стал бывать на форуме...

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

итак, пишу в пакетный файл единственную строку

Code: Select all

(.+)	ZZZ	nr
применяю его на тексте, но выдается ошибка такого характера
Ошибка в пакетном файле, строка: 1.
Синтаксическая ошибка в регулярном выражении!
так где же эта ошибка в этой регулярке?

если у вас есть связь с KDJ, то, пожалуйста, свяжитесь...

или может все таки есть другой вариант написать эту регулярку?

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

InFive wrote:итак, пишу в пакетный файл единственную строку

Code: Select all

(.+)	ZZZ	nr
применяю его на тексте, но выдается ошибка такого характера
Ошибка в пакетном файле, строка: 1.
Синтаксическая ошибка в регулярном выражении!
так где же эта ошибка в этой регулярке?
У меня ваш пример отрабатывается нормально - количество замен 117 (за образец был взят текст с этой страницы форума)

версии используемых файлов:

TextReplace.js
// http://akelpad.sourceforge.net/forum/vi ... 0804#30804
// Version: 2016-07-26

TextReplace_function.js
http://akelpad.sourceforge.net/forum/vi ... 0653#30653
Version: 2016-07-20

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

InFive wrote:
Ошибка в пакетном файле, строка: 1.
Синтаксическая ошибка в регулярном выражении!
так где же эта ошибка в этой регулярке?
В моем случае тоже, как и у opk44, никаких ошибок...
Видимо, у Вас где-то ошибка в кодировке или разделителях...
Выложите куда-нибудь сам batch - файл, посмотрим.

Offline
Posts: 269
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Пожалуйста, помогите разобраться. Есть текст:

Code: Select all

a11
b22
b22
b22
c33
Выражение

Code: Select all

(b[^\n]+\n)+
находит и выделяет все три строчки 'b22' вместе. То есть '+' работает, как и должен работать: одно или больше совпадений. А выражение

Code: Select all

a[^\n]+\n(b[^\n]+\n)+c[^\n]+\n
не выделяет весь текст, хотя по идее должно. Весь текст можно выделить только если добавить ещё +, «ужаднить» т.е.:

Code: Select all

a[^\n]+\n(b[^\n]+\n)++c[^\n]+\n
Почему в первом случае выделяет, а во втором нет? Баг, фича, или я чего-то недопонял?

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

yozhic wrote:Баг, фича
1. Возможно и то и другое.
Например, при использовании SearchReplace.js (т.е. на JavaScript-овском движке), наоборот, именно второй вариант будет "рабочим", а третий (с 2-мя плюсами) нет.
2. Из любопытства. А есть ли вообще необходимость проверять "середину"? Проще же ловить только "края" (по аналогии с HTML тэгом):

Code: Select all

a[^\n]+\n(.*\n)c[^\n]+\n

Offline
Posts: 269
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

opk44 wrote:необходимость проверять "середину"?
Есть. В реальном тексте есть строчки вида a11\nc33\nc33\n – такие тоже поймаются, если серединку обобщить, а их ловить нельзя.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

yozhic wrote: Почему в первом случае выделяет, а во втором нет? Баг, фича, или я чего-то недопонял?
Очень похоже на ошибку в движке парсинга регэкспов. По идее, должно работать во всех случаях...

Offline
Posts: 96
Joined: Tue Nov 10, 2015 4:56 am

Post by InFive »

ребят, помогите составить регулярку/функцию

нужно вот такое и подобное ему

аллергические и кожные ZZZ 10,164,192,193,207,215,216,270,271—273,275,276,278,279,282—285,287,321,326

превращать вот в такое

аллергические и кожные 10
аллергические и кожные 164
аллергические и кожные 192
аллергические и кожные 193
аллергические и кожные 207
аллергические и кожные 215
аллергические и кожные 216
аллергические и кожные 270
аллергические и кожные 271—273 271
аллергические и кожные 275
аллергические и кожные 276
аллергические и кожные 279
аллергические и кожные 282—285 282
аллергические и кожные 287
аллергические и кожные 321
аллергические и кожные 326

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

InFive wrote:помогите составить регулярку/функцию
...
аллергические и кожные ZZZ 10,164,192,193,207,215,216,270,271—273,275,276,278,279,282—285,287,321,326

превращать вот в такое

аллергические и кожные 10
аллергические и кожные 164
...
SearchReplace.js
[v] Регулярные выражения
[v] Многострочно
[v] Заменять на функцию

Code: Select all

Что:^.*?( ZZZ ).*$
Чем:var a,b,c,str;str="";a=$0.split($1);c=a[1].split(",");for(b in c){str+=a[0]+" "+c[b].replace(/((\d+)—\d+)/g,"$1 $2")+"\n";}return(str);
Last edited by YuS on Mon May 28, 2018 2:44 pm, edited 1 time in total.
Post Reply