'String' 上的模式匹配以获得转义引号

Pattern Matching on 'String' to get Escaped Quote

是否可以对转义引号进行模式匹配?

这是我(错误地)尝试过的:

g :: String -> Bool
g ('\':'"':_) = True
g _            = False

但结果不符合我想要的功能行为。

ghci> g "\""
False
ghci> g "\\""
True

字符串字符串文字是有区别的。基本上,字符串是一个接一个的字符列表,字符串文字只是一些 notation 相同的。该表示法必须 "escape" 某些字符,否则会导致语法歧义,但它仍然表示字符串 没有 转义。

Haskell 表达式 "\"" 是包含单个字符 " 的字符串的 表示法 。我们需要反斜杠,因为在没有反斜杠的情况下编写 """ 会使字符串的内容看起来就像一个结束引号并破坏我们的符号。但是字符串本身仍然只有一个 ".

当您匹配字符串值时,您匹配的是字符串本身,而不是它的符号。这意味着您不必担心字符串中的转义字符,因为它们只存在于符号级别。因此,要匹配仅包含 " 的字符串,您可以使用以下模式:

foo ['"'] = ...

如果您尝试考虑反斜杠,您将匹配不同的字符串。