parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Все-таки что-то не так

rash 15.12.2010 01:50

И все же мои опасения были не напрасными.
Подводят либо знания RE, либо знания парсера, но что-то не ладится с таким подходом.
Привожу код:
^textpreprocess[^taint[as-is][$form:message_text]]

@textpreprocess[source]

<pre>$source</pre>

$parts[^source.match[^^(.*)^$][gm]]

^parts.count[]

^if($parts){
        <ul>
        ^parts.menu{
                <li>${parts.1}
        }
        </ul>
}

^parts.save[match.txt]
На входном тексте
AB
CD
EF
GH
IJ
KL
MN
OP
все хорошо, получаю текст формы в pre, указание о 8 совпадениях (^parts.count[]), список из всех строк. В файле почему-то все эти строки записаны в колонке postmatch, хотя в опциях я не просил вообще создавать эти колонки (жадность/нежадность квантификатора звездочки ни на что не влияет, проверял).

Теперь меняем входной текст:
AB
CD

EF
GH
IJ
KL
MN
OP
Вот тут-то все и ломается.
В pre текст приходит верно, сообщается о 4 совпадениях, список выглядит уже совсем непонятно:
* AB
* CD
*
*
В файле по-прежнему все совпадения в postmatch, последние две строки пустые (с табами в первых двух полях).

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

Собственно, вопрос: где я туплю? Пробовал ставить к звездочке нежадность — ничего не меняется.
Как корректно разбить на строки текст с пустыми строками? Если разделять текст строкой, в которой оставлять один пробел — все работает прекрасно, но это меня не устраивает.