Page 48 of 99
Posted: Sat Jun 07, 2014 6:44 am
by Instructor
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
Понятно. А как тогда быть, если надо проверить альтернативы из нескольких символов, делать несколько проверок?