Posted: Mon Sep 15, 2014 11:19 am
Serge Yolkin
не помогло. Да это и не спец-символы, чтобы их экранировать.
не помогло. Да это и не спец-символы, чтобы их экранировать.
Code: Select all
0 "^\s*+([^\s,`]+)\s*+:" `\1=(4,${TAG},0)`
Изменил это правило на более полноеvar := value
Code: Select all
0 "^\s*+([^\s,`]+)\s*+:\s*+((?<=\s);.*)?$" `\1=(4,${TAG},0) \2=(3,${COMM},0)`
Code: Select all
0 `^(?:(Global)\s++)?+([\w#@\$\.]+?)$` `\1=(0,${TYPE},0) \2=(0,${VAR},0)`
Code: Select all
0 `^(Global\s++)?+([\w#@\$\.]+?)$` `\1=(0,${TYPE},0) \2=(0,${VAR},0)`
Drugmix wrote:Positive lookbehind'ы поломались?
AkelHelp-Rus.htm wrote:(?<=шаблон) Положительный просмотр назад (positive lookbehind). Соответствие не сохраняется для последующего использования. Например, '(?<=abc)z' соответствует "z" только, если ему предшествует "abc". Шаблон должен быть фиксированной длины.
При проверке "StringyLauncher.ahk" столкнулся с подобным поведением. См. тестовую.Drugmix wrote:
Тестовая...раскрашивает строки вот так...
Здесь уже проблема в пересечении правил. Закомментируйте секцию "Quotes:" и наложений не будет. Помним, что у секции "Quotes:" больший приоритет, чем у "QuotesRE:".Drugmix wrote:Если хочется добить баг насовсем...
Хмм, а тесты говорят о другом...DV wrote: Смысл "хака" в том, что выражения вида .* и .+ до сих пор остаются "сверхжадными", выделяя весь файл до конца,
Code: Select all
abcdef
ghijkl
mnopqrst
mnopqrst
Code: Select all
^.*no
Code: Select all
^.+no
Не-не-не, я о самом хаке ничего не говорил, только лишь уточнил, что текущая жадность квантификаторов соответствует классическим, причем без исключений.Serge Yolkin wrote:YuS
Насколько я понял, хак убирает квантификатор, только если он в самом конце выражения, если после него что-то есть ("no"), то ничего не хачится.
Code: Select all
- Квантификаторы регулярных выражений (*, +, {n,}) являются по умолчанию жадными (кроме одинарной точки, например, ".*" или ".{5,10}").
Skif_off wrote:Вертикальной прокруткой прокрутил файл вниз-вверх и AkelPad завис...
ТестоваяDrugmix wrote:Если хочется побороться с падениями, то вот, например, правило под старый парсер:которое способно сейчас положить акелпад на файле с длинными строками, содержащими множественные кавычки, например на этом, если его быстро поскроллить туда-сюда.Code: Select all
0 `"((?:[^"]*?(?:"")?)*?)"` `\1=(0,${STR},0)`
Code: Select all
abc def
ghi jkl
Code: Select all
abc.*
abc.+
abc.*?
abc.+?
abc[^x]*
abc[^x]+
abc[^x]*?
abc[^x]+?
Гмм, по-моему, тут всё верно. Давайте читать регэксп буквально, как это рекомендуют во многих источниках...DV wrote: Ведь регулярка abc.*? в качестве минимального вхождения должна бы сработать на текст "abc", не "заглатывая" весь оставшийся текст.
Точно так же abc.+? мог бы удовлетвориться текстом "abc " (с одним пробелом в конце) - но нет же, он "заглатывает" всё!
Code: Select all
abc def
ghi jkl