Page 7 of 28
Posted: Tue Dec 03, 2013 7:10 am
by Serge Yolkin
[off]
Не удержался 
[/off]
Posted: Tue Dec 03, 2013 4:26 pm
by YuS
Skif_off wrote:
Тогда не захватится \xxx@x
Вы сформулируйте полностью задачу, тогда и решать её будем, а так... вопрос был по другому поводу, на него и был дан ответ.)
Serge Yolkin wrote:Не удержался

А попадалось ли Вам выражение для разбора е-майлов?
Примерно
такое 
Posted: Tue Dec 03, 2013 5:40 pm
by Skif_off
YuS wrote:Вы сформулируйте полностью задачу, тогда и решать её будем, а так... вопрос был по другому поводу, на него и был дан ответ.)
Просто решил написать, почему не подходят предложенные варианты, а не обойтись только благодарностью за пояснения
Добавлено:
В
параллельной теме Xephon предложил такое
выражение, кажется, это можно считать вариантом решения.
Posted: Wed Dec 04, 2013 7:20 am
by YuS
Skif_off wrote:
В
параллельной теме Xephon предложил такое
выражение, кажется, это можно считать вариантом решения.
Говорю же, необходимо полное условие, т.е. ссылку туда сразу надо было дать.)
Если я правильно понял, то из следующих строк:
\@
\@x
\x@x
\@x
\x@
Необходимо найти минимальное сочетание обязательных символов и хотя бы одной буквы. Символы "" и "@" - обязательны, а остальные могут отсутствовать. Так? Если да, то:
Наверное, без поиска по условию тут не обойтись:
Code: Select all
\\[a-z]*@(?(?<=[a-z]@)[a-z]*$|[a-z]+$)
Расшифровка
Возможно, что регулярные джедаи смогут и без него обойтись, но я не из таких, увы.
ЗЫ К сожалению, в Акелпадовских регулярках это пока не реализовано...
Добавлено:
ЗЗЫ Кстати, да, предложенный вариант джедаем
Xephon, как раз таки работает, правда только вот в таком виде:
Posted: Wed Dec 04, 2013 1:22 pm
by Skif_off
YuS wrote:Говорю же, необходимо полное условие, т.е. ссылку туда сразу надо было дать.)
Думал, есть что-то универсальное, для любого регулярного выражения, а пример на обе темы для простоты восприятия (своего)

Posted: Thu Dec 19, 2013 8:17 pm
by Drugmix
Помогите улучшить правило для coder.coder:
Code: Select all
0 "^\s*(\d+)\s*`(.*)`\s*`\s*\\(\d*)=\((.*),(.*),(.*)\)\s*`\s*$" "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"
это правило в принципе работает:

но если в правиле (для которого пишется это правило) BackRef'ов больше одного, то окрашивается не так, как хотелось бы:

я понимаю почему так происходит (потому что шаблон составлен именно так, lol), но не понимаю как это исправить.
По идее, должно бы работать что-то вроде
Code: Select all
0 "^\s*(\d+)\s*`(.*)`\s*`(\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`\s*$" "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \4=(2,#0000ff,0) \5=(0,#ff0000,0) \6=(0,#00ff00,0) \7=(2,#0000ff,0)"
или
Code: Select all
0 "^\s*(\d+)\s*`(.*)`\s*`(?:\s*\\(\d*)=\((.*),(.*),(.*)\)\s*)*`\s*$" "\1=(0,#ff0000,0) \2=(0,#00ff00,0) \3=(2,#0000ff,0) \4=(0,#ff0000,0) \5=(0,#00ff00,0) \6=(2,#0000ff,0)"
но одна из групп
(.*) становится овержадной, а если им всем трём добавить по
? в конец - то правило перестаёт работать совсем.
Posted: Thu Jan 02, 2014 12:46 pm
by yozhic
В тексте
abc dbe fbg axc dxe fxg
нужно найти все совпадения «b» и «x» между любыми буквами, кроме «a» и «c», и заключить их в фигурные скобки.
Выражение
Найти: (?<!a)(b|x)(?!c)
Заменить: {\1}
совпадения находит, но ничего не меняет. В синтаксисе ошибка, или может в программе «жучок»? AkelPad 4.8.6.
Posted: Thu Jan 02, 2014 12:57 pm
by Instructor
yozhic
Для конструкций (?<!) и (?<=) используйте "Заменить все" (
пояснение).
Posted: Mon Jan 06, 2014 1:22 pm
by Serge Yolkin
Господа, а не подскажет ли кто, как записать "НЕ_обратная_ссылка"?
Выражение вида
в целом работает, но не всегда так, как хотелось бы. А как, вместо ".*", написать"всё, что угодно, кроме \1"?
Posted: Tue Jan 07, 2014 5:08 pm
by YuS
Serge Yolkin wrote:А как, вместо ".*", написать"всё, что угодно, кроме \1"?
Вот
так.
Posted: Tue Jan 07, 2014 5:42 pm
by Instructor
YuS
Не подойдет при вложенности: "1'x'3"
Serge Yolkin
В
тестовой версии можно так:
Posted: Tue Jan 07, 2014 7:01 pm
by Serge Yolkin
YuS
Спасибо, но не то: нужна именно обратная ссылка, т.е., если отловлена одинарная кавычка, то двойная допускается, всё, кроме одинарной, и наоборот.
Instructor
В не тестовой вот такая конструкция работает:
Code: Select all
`\s(['"\u0060]?)(((?!\1).)+)(\1)\s*$` `\1=... \2=... \4=...`
А с тестовой ещё поиграюсь.
Posted: Wed Jan 08, 2014 9:51 am
by YuS
Instructor wrote:YuS
Не подойдет при вложенности: "1'x'3"
Это да... поэтому сначала так и написал:
но, проверив и убедившись, что в AP это пока нереализовано, то исправил на то, что работало в релизе...
Про тестовую версию теперь знаю, что там уже работает.
Кстати, на regex101.com в конструкции [^\1], обратная ссылка почему-то интерпретируется как символ с восьмеричным индексом... ещё и это вызвало сомнение, в том, что это, возможно, неправильная запись регулярки. Ведь в наборах символов, сами метасимволы и обратные ссылки могут интерпретироваться совсем по-другому...
Posted: Wed Jan 08, 2014 10:15 am
by Lenchik
YuS wrote:на regex101.com
Какие настройки на этом сайте надо вбивать справа (и/или сверху) от строки выражения, чтобы было почти эквивалентно акельпадным регулярным выражениям:
а) в coder файлах;
б) в строках поиска и searchandreplace.js?
Posted: Wed Jan 08, 2014 10:37 am
by Drugmix
Lenchik
PCRE (PHP), gm (+ возможно U, а возможно не поможет).
И я не уверен, что новомодные Character classes с того сайта (типа [[:alpha:]]) поддерживаются в AkelPad (в документации про них не сказано, а проверять - не проверял).