Побег метасимволов PCRE в Хаскеле - PullRequest
3 голосов
/ 01 апреля 2012

Предоставляет ли какая-либо из библиотек Haskell PCRE функцию для экранирования метасимволов регулярных выражений в строке?Т.е. функция, принимающая строку типа «[$ 100]» и превращающая ее в «\ [\ $ 100 \]».

Я ищу эквивалент re.escape Pythonчто я не могу найти в regex-pcre.

1 Ответ

2 голосов
/ 07 апреля 2012

Я не знаю о такой функции ни в одной из библиотек PCRE, но в зависимости от того, что вы пытаетесь достичь, вы можете использовать цитирование PCRE:

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.ByteString.Char8 as B
import Text.Regex.PCRE


quotePCRE bs = B.concat [ "\\Q" , bs , "\\E" ]

-- Of course, this won't work if the
-- string to be quoted contains `\E` ,
-- but that would be much eaiser to fix
-- than writing a function taking into
-- account all the necessary escaping.

literal = "^[$100]$"

quoted = quotePCRE literal

main :: IO ()
main = do B.putStr "literal: " >> B.putStrLn literal

          -- literal: ^[$100]$

          B.putStr "quoted: "  >> B.putStrLn quoted

          -- quoted: \Q^[$100]$\E

          putStrLn "literal =~ literal :: Bool"
          print ( literal =~ literal :: Bool )

          -- literal =~ literal :: Bool
          -- False

          putStrLn "literal =~ quoted :: Bool"
          print ( literal =~ quoted :: Bool )

          -- literal =~ quoted :: Bool
          -- True
...