← Архив: Common Lisp

Я познаю regexp c cl-ppcre

Author: · 31.07.2013 13:30
· original author: motopeh
CL-USER> (let ((txt "Тип ошибки:
Пустое обязательное поле - 25"
)
)

           (ppcre:register-groups-bind (name (#'parse-integer index))
               ("^\\s*Тип ошибки:\\s*(.+)\\s*-\\s*(\\d)$" txt)
             (list name index)
)
)

NIL
CL-USER>
Что я не так делаю?
· original author: motopeh
Всё понял, надо так:
CL-USER> (let ((txt "Тип ошибки:
Пустое обязательное поле - 25"
)
)

           (ppcre:register-groups-bind (name (#'parse-integer index))
               ("^\\s*Тип ошибки:\\s*(.+)\\s*-\\s*(\\d+)$" txt)
             (list name index)
)
)

("Пустое обязательное поле " 25)
CL-USER>
Только вот нельзя в регэкспе указать чтобы name пустотами не оканчивался?
· original author: motopeh
В принципе можно обойтись этим:
CL-USER> (let ((txt "Тип ошибки:
Пустое обязательное поле  - 25"
)
)

           (ppcre:register-groups-bind (name (#'parse-integer index))
               ("^\\s*Тип ошибки:\\s*(\\S.+\\S)\\s*-\\s*(\\d+)$" txt)
             (list name index)
)
)

("Пустое обязательное поле" 25)
· original author: orivej
Ещё с квантификатором "скромности" ("?"):
"^\\s*Тип ошибки:\\s*(.+?)\\s*-\\s*(\\d+)$"
· original author: motopeh
Тоже работает, но вот не пойму в чём суть. "?" вполне может захватить \#\Space.
· original author: motopeh
Хотя нет, не может.