在Haskell PCRE中表达的开始

时间:2019-04-24 15:11:13

标签: regex haskell pcre

我试图在表达式的开头查找美元符号。 我希望它是"^\\$",因为我必须转义美元符号以避免将其视为行尾。但是,我看到以下结果:

import Text.Regex.PCRE

let x = "$100.00" :: Text

let m = show x =~ "$" :: Bool
print m

let m = show x =~ "^$" :: Bool
print m

let m = show x =~ "^\\$" :: Bool
print m

屈服:

True
False
False

我想念什么?

更新1

如果我尝试转义更少或更多的“ \”字符:

let m = show x =~ "^\$" :: Bool
print m

let m = show x =~ "^\\\$" :: Bool
print m

两种产品

Parse error (line 13, column 30): lexical error in string/character literal at character '$'

更新2

let y = "1$00.00" :: Text
let m = show y =~ "$" :: Bool
print m
True

这就是为什么我想要^\\$而不仅仅是$

更新3

当我不使用show

let m = x =~ "^\\$" :: Bool
print m

生产

<interactive>:1:9: error:
    • No instance for (RegexLike Regex Text) arising from a use of ‘=~’
    • In the expression: x =~ "^\\$" :: Bool
      In an equation for ‘m’: m = x =~ "^\\$" :: Bool

2 个答案:

答案 0 :(得分:3)

您想使用unpackText转换为String,而不是showshow x添加引号,以防止您的正则表达式匹配。

答案 1 :(得分:0)

Data.Text.unpack是有效的功能。

import Data.Text as T

let x = "$100.00" :: Text
print $ (T.unpack x)
print $ IHaskellPrelude.length (T.unpack x)
let m = ((T.unpack x) =~ "^\\$" :: Bool)
print m

生产

"$100.00"
7
True