Сопоставление 8-битных символов в Haskell Text.Regex.Posix.ByteString

мое приложение Haskell читает ввод как список ByteString, и я использую Text.Regex.Posix.ByteString.regexec для поиска совпадений. Некоторый ввод имеет код символа 253 (это 1/2 символа в одном наборе символов IBM PC), и кажется, что шаблон '.' (т. е. точка, «совпадение с любым символом») ему не соответствует. Любой способ сделать это совпадать?


person Michael restore Monica Cellio    schedule 25.10.2013    source источник


Ответы (2)


Это работает для меня при установке Windows Haskell:

> length $ ((pack ['\1'..'\253']) =~ "." :: [[ByteString]])
252

т.е. точка соответствует всем символам в диапазоне, включая код 253.

Обратите внимание, что библиотека обращается к базовому сопоставителю регулярных выражений posix, как я полагаю, обычно из glibc.

Поэтому я полагаю, что любая проблема, с которой вы столкнетесь, будет связана с этой точной базовой реализацией c.

Что-то вроде Text.Regex.TDFA.ByteString может дать вам более четкое поведение в этом случае, поскольку все это на Haskell?

person sclv    schedule 26.03.2015

Это не имеет смысла. Почему вы хотите сопоставить половину символа? . будет соответствовать полному символу.

person David Knipe    schedule 25.10.2013
comment
В некоторых кодировках, таких как UTF-8, это всего лишь половина символа. Я ищу соответствие 8-битным символам. - person Michael restore Monica Cellio; 25.10.2013