Page 48 of 99

Posted: Sat Jun 07, 2014 6:44 am
by Instructor
ShDM
Попробуйте отсюда: http://akelpad.sourceforge.net/files/plugs/Coder/

Posted: Sat Jun 07, 2014 7:48 am
by ShDM
Instructor Ооо! Спасибо тебе! Заработало.

Posted: Wed Jun 11, 2014 5:51 pm
by Drugmix
Не понимаю почему .coder ругается на правило QuotesRE

Code: Select all

0	`(?<=.*)(abc)` `\1=(0,${STR},0)`

Posted: Wed Jun 11, 2014 8:21 pm
by opk44
Drugmix
В документации сказано: "Шаблон должен быть фиксированной длины."

Posted: Wed Jun 11, 2014 11:04 pm
by Drugmix
opk44 wrote:Drugmix
В документации сказано: "Шаблон должен быть фиксированной длины."
И что это означает? Запрет на использование квантификаторов в шаблоне?

Posted: Wed Jun 11, 2014 11:12 pm
by Drugmix
Instructor
я уже очень давно прошу приделать каскадную работу правил раскраски текста.
Скажите, пожалуйста, вы планируете это прикрутить хоть сколько-нибудь скоро?

Posted: Wed Jun 11, 2014 11:54 pm
by FeyFre
Drugmix wrote:
opk44 wrote:Drugmix
В документации сказано: "Шаблон должен быть фиксированной длины."
И что это означает? Запрет на использование квантификаторов в шаблоне?
Вплоть до этого. Это не прихоть и не недочет нашей реализации, это так сказать общая "проблема". Движки регулярок не умеют применять регулярки в обратном порядке, потому Lookbehind-ы должны знать на сколько символов назад отойти и начинать сопоставлять. См. поподробнее

Posted: Thu Jun 12, 2014 11:15 am
by Xephon
Какой смысл в выражении '(?<=.*)(abc)'?
Последовательность 'abc', перед которой от нуля до бесконечности любых символов, эквивалентна просто 'abc'.

Posted: Thu Jun 12, 2014 1:49 pm
by opk44
Xephon
1. Пример: довольно надежно можно выделить в тексте грузинские фамилии (-дзе; -швили).
2. Очевидно что НЕ эквивалентна во втором случае.

Posted: Thu Jun 12, 2014 2:31 pm
by Xephon
Выражение '(?<=.*)(abc)', если бы оно было валидным, выделяло бы только 'abc'. Для примера с грузинскими фамилиями оно выделило бы все фрагменты 'дзе' и 'швили', вне зависимости от того, являются они частью слова или отдельным словом, находятся в начале, середине или конце строки.
В данном случае надежность могла бы быть обусловлена только тем, что фрагменты 'дзе' и 'швили' не встречаются в тексте нигде, кроме окончаний фамилий. Но в этом случае выражение типа 'abc' обладало бы такой же надежностью.

Posted: Thu Jun 12, 2014 3:27 pm
by opk44
Xephon wrote:Выражение... выделяло бы только 'abc'. ...
Слона-то я и не приметил...

Posted: Fri Jun 13, 2014 12:06 pm
by Drugmix
Xephon wrote:Какой смысл в выражении '(?<=.*)(abc)'?
Последовательность 'abc', перед которой от нуля до бесконечности любых символов, эквивалентна просто 'abc'.
Изначально я хотел попробовать правила, с помощью которых можно было бы реализовать псевдо-каскадность раскраски кода.

Code: Select all

0	`(?<=^.*,\s*)(abc)(?=.*$)` `\1=(0,${STR},0)`
если в строке перед abc есть запятая, то раскрасить abc так-то.

Но получил ошибку и начал упрощать шаблон по максимуму, чтобы понять что вызывает ошибку.

Posted: Mon Jun 16, 2014 7:43 am
by Cuprum
Тоже проблема с регэкспом в QuotesRE. Это просто пример, чтобы показать ошибку.
Вот такое не работает:

Code: Select all

0	`(?<!\(|\{)(a)+`   `\1=(0,${AREA},0)`
а такое - работает:

Code: Select all

0	`(?<!\()(a)+`   `\1=(0,${AREA},0)`
Получается, если в первом выражении в негативную ретроспективную проверку включить выбор вида \(|\{, то ошибка. Или может я неправильно записал?

Posted: Mon Jun 16, 2014 4:44 pm
by Instructor
Cuprum
В шаблонах фиксированной длины нельзя использовать '|'.

Code: Select all

0   `(?<![({])(a)+`   `\1=(0,${AREA},0)`

Posted: Mon Jun 16, 2014 6:16 pm
by Cuprum
Instructor
Понятно. А как тогда быть, если надо проверить альтернативы из нескольких символов, делать несколько проверок?

Code: Select all

(?<!ab)(?<!cd)(текст)