Введение
Я использую библиотеку Haskell Text.Regex
и хочу сопоставить некоторые символы, которые обычно имеют значение в регулярных выражениях.Согласно документации Text.Regex
,
синтаксис регулярных выражений ... синтаксис egrep (то есть регулярных выражений "расширенных" POSIX).
И, очевидно, при экранировании в Расширенные регулярные выражения POSIX (ERE) используются обратные слэши [в отличие от Базовые регулярные выражения POSIX (BRE) ].
Проблема
Однако, когда я пытаюсь сделать что-то вроде этого:
> import Text.Regex
> matchRegex (mkRegex "\*") "*"
Я получаю следующую ошибку:
<interactive>:1:23:
lexical error in string/character literal at character '*'
То же самое происходит независимо от того, чтосимвол, который я ставлю после \
.
Обход
Я мог бы сделать что-то вроде этого:
> matchRegex (mkRegex "[*]") "*"
Just []
, который работает, но кажется, чтохак, особенно если я хочу избежать нескольких вещей подряд (например, mkRegex "[[][(][)][]]"
, что соответствует [()]
).
Вопрос
Это единственный способ сбежать вPOSIX ERE?Почему библиотека Text.Regex
на Haskell не поддерживает \
так, как кажется?