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

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

Post by YuS »

F. Phoenix wrote:

Code: Select all

Code:
"тест" проверка тест\\"тест тест"
Вторая строка подсвечивается с шаблоном

Code: Select all

"([^\\]|\\.)*?"
но не подсвечивается с

Code: Select all

(?<=[^\\])(?:(\\)\1)*\K"([^\\]|\\.)*?"
Это я могу и сам увидеть... :)
Не пойму, в чем проблема?
Смысл в том, что в строке три символа бакслеш, т.е. собственно сам символ бакслеш и экранированная кавычка. Неважно, преднамеренно набран такой текст или по ошибке. Для регэкспа это не имеет значения. Кроме того:
F. Phoenix wrote:Как в coder-файле проверить кол-во символов на четность?
Для бакслеш:

Code: Select all

(?<=[^\\])(?:(\\)\1)*\K
Для любого символа:

Code: Select all

del (удалил шаблон), т.к. для любого символа не работает корректно, лучше использовать шаблон для конкретного символа.
и т.п.

ЗЫ
Чтобы не было разночтений:
В примере выше, строка одна, а подстрок в кавычках две...

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

YuS wrote:
Drugmix wrote: Внутри диапазонов экранировать символы не надо.
Понимаю, что понедельник - день тяжелый, но дублировать посты не требуется.
Вы просто попробуйте не экранировать бакслеш... а потом уже отписывайтесь, что не надо. :)
:oops:

Offline
Posts: 176
Joined: Sat Dec 24, 2011 4:05 pm

Post by F. Phoenix »

F. Phoenix wrote:Как в coder-файле проверить кол-во символов на четность?
YuS wrote:Для бакслеш:

Code: Select all

(?<=[^\\])(?:(\\)\1)*\K
Для любого символа:

Code: Select all

del (удалил шаблон), т.к. для любого символа не работает корректно, лучше использовать шаблон для конкретного символа.
Спасибо за наводку.

Вариант проверки экранирования для .NET:

Code: Select all

(?<=(^|[^\\])(\\.)*)строка

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

Post by InFive »

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

например,

Code: Select all

<footnote n="[153]">[152]</footnote>
мне нужно отловить такие несовпадения, как это сделать?

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

Post by YuS »

InFive wrote: мне нужно отловить такие несовпадения, как это сделать?
Если требуется замена на совпадающую цифру:
SearchReplace.js
[v] Регулярные выражения
[v] Многострочно
[v] Заменять на функцию

Code: Select all

Что:^([^\[\n]*\[)(\d+)(\][^\[\n]*\[)(\d+)(\][^\n]*)$
Чем:if (parseInt($2) != parseInt($4)){return $1 + $2 + $3 + $2 + $5;} else {return $0}
Если требуется просто отметка на несовпадение:

Code: Select all

Чем: if (parseInt($2) != parseInt($4)){return $0 + "=====";} else {return $0;}

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

Post by InFive »

YuS wrote:Если требуется просто отметка на несовпадение:

Code: Select all

Чем: if (parseInt($2) != parseInt($4)){return $0 + "=====";} else {return $0;}
спасибо, то что нужно, жалко что оно не работает в скрипте TextReplace.js, в нем можно было бы сохранить как шаблон, а то в скрипте SearchReplace.js шаблоны не сохраняются у меня...

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

Post by YuS »

InFive wrote:спасибо, то что нужно, жалко что оно не работает в скрипте TextReplace.js
Кто сказал, что не работает?

Code: Select all

Что:^([^\[\n]*\[)(\d+)(\][^\[\n]*\[)(\d+)(\][^\n]*)$
Чем: if (parseInt(_s2) != parseInt(_s4) ) {return _s0 + "=====";} else {return _s0;}
Только пошаговая замена там как-то не совсем верно работает, заменяет только в первой строке, при найденном совпадении в любой другой строке... может баг...
Надо попросить KDJ проверить этот момент.
А "Заменить всё", работает так как надо.
InFive wrote: в скрипте SearchReplace.js шаблоны не сохраняются у меня...
А чего не сохраняется? Может обновить скрипт?
Справа от полей Что: и Чем: есть кнопка с угловой скобкой, на неё жмем и открываются шаблоны, в которые можно добавлять текущие...

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

Post by InFive »

YuS wrote:Кто сказал, что не работает?

Code: Select all

Что:^([^\[\n]*\[)(\d+)(\][^\[\n]*\[)(\d+)(\][^\n]*)$
Чем: if (parseInt(_s2) != parseInt(_s4) ) {return _s0 + "=====";} else {return _s0;}
вот теперь работает, да, согласен :D
YuS wrote:
InFive wrote: в скрипте SearchReplace.js шаблоны не сохраняются у меня...
А чего не сохраняется? Может обновить скрипт?
Справа от полей Что: и Чем: есть кнопка с угловой скобкой, на неё жмем и открываются шаблоны, в которые можно добавлять текущие...
история раньше сохранялась в бОльшем количестве (я менял в скрипте), теперь только 10... а шаблоны, если сохранить, то через немного времени они вылетают все, такое у меня уже давно, как пользуюсь AkelPad, так всегда вылетали шаблоны и список последних документов, поэтому мне нельзя в нем сохранять шаблоны, я обычно шаблоны сохранял в текстовом документе для сохранности... а вот в скрипте TextReplace шаблоны неплохо реализованы, поэтому я делаю акцент на скрипт TextReplace.js... но я привык к скрипту SearchReplace.js, а для TextReplace.js надо немного по-другому составлять различные команды/регулярки, пока не перестроился, часто торможу )))

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

Post by InFive »

вот реальный пример, только урезанный



'1', '1', '1', '0', '
'1', '1', '1', '0', '
'1', '1', '1', '0', '
'1', '1', '1', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '4', '0', '


у меня получается функция, которая проверяет изменение третьей цифры в строках в такой последовательности - 1-ая строка проверяется со 2-ой, 3-ья с 4-ой, 5-ая с 6-ой и т.д. (но это не сработает корректно если количество строк в блоке - четное число)

а мне нужно чтобы проверялось так - 1-ая со 2-ой, 2-ая с 3-ьей, 3-ья с 4-ой, 4-ая с 5-ой, 5-ая с 6-ой и т.д.

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

помогите составить функцию, желательно для скрипта TextReplace.js

Благодарю
Last edited by InFive on Tue Mar 21, 2017 8:06 am, edited 1 time in total.

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

Post by YuS »

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

Вот, совсем не понял - какие изменения должна отслеживать функция? Т.е. где брать образец, что с чем сравнивать?

Предполагаю только, что третья цифра из строки сравнивается с третьей цифрой следующей строки? Так?

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

Post by InFive »

YuS wrote:Т.е. где брать образец, что с чем сравнивать?
пример спрятан под спойлером "пример"...

вот пример без спойлера

'1', '1', '1', '0', '
'1', '1', '1', '0', '
'1', '1', '1', '0', '
'1', '1', '1', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '2', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '3', '0', '
'1', '1', '4', '0', '

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

Post by opk44 »

InFive
Думаете стало понятнее?
Ваше пояснение в стиле анекдота про "рацию на бронепоезде".

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

Post by InFive »

YuS wrote:Предполагаю только, что третья цифра из строки сравнивается с третьей цифрой следующей строки? Так?
да, так... а потом чтобы помечалась та строка, в которой третья цифра изменилась...
opk44 wrote:Думаете стало понятнее?
куда еще подробнее нежели я написал уже ранее http://akelpad.sourceforge.net/forum/vi ... 2447#32447 ?

мне нужно пометить строки, в которых третья цифра изменена по сравнению с третьей цифрой из предыдущей строки
Last edited by InFive on Tue Mar 21, 2017 12:12 pm, edited 1 time in total.

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

Post by YuS »

InFive wrote:
opk44 wrote:Думаете стало понятнее?
куда еще подробнее нежели я написал уже ранее http://akelpad.sourceforge.net/forum/vi ... 2447#32447 ?
Там хоть и подробно, но совсем неточно описано... то, что я предположил, это только догадка была :)
InFive wrote: мне нужно пометить строки, в которых третья цифра изменена по сравнению с третьей цифрой из предыдущей строки
Вот так, гораздо точнее...

TextReplace.js

[v] Регулярные выражения
[v] Заменять на функцию

Code: Select all

Что:^'\d+',\s'\d+',\s'(\d+)[^\n]*
Чем:if (typeof(n) == "undefined" || n == parseInt(_s1)) {n=parseInt(_s1);return _s0} else {n=parseInt(_s1);return _s0+"====="}
Замену осуществлять один раз: "Заменить всё", после чего, при необходимости повторной замены, либо в другой вкладке, необходимо закрыть окно скрипта и открыть вновь - для удаления временной переменной.
В принципе, ничего страшного, если не закрывать, но тогда в самой первой совпавшей с шаблоном строке, придется снимать пометку вручную.

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

Post by InFive »

YuS wrote:

Code: Select all

Что:^'\d+',\s'\d+',\s'(\d+)[^\n]*
Чем:if (typeof(n) == "undefined" || n == parseInt(_s1)) {n=parseInt(_s1);return _s0} else {n=parseInt(_s1);return _s0+"====="}
благодарю, работает...

а как научиться составлять подобные функции? или это уже надо быть программером владеющим манипулированием переменными? может, какой справочник посоветуете?
Post Reply