regex - Haskell中用于正则表达式的"Raw"字符串

标签 regex haskell

我似乎无法在 Haskell 中创建正则表达式,我想做的是转换这个字符串(它与一段文本中的 URL 匹配)

\b(((\S+)?)(@|mailto\:|(news|(ht|f)tp(s?))\://)\S+)\b

进入正则表达式,问题是我在 ghci 中不断收到这个错误
Prelude Text.RegExp> let a = fromString "\b(((\S+)?)(@|mailto\:|(news|(ht|f)tp(s?))\://)\S+)\b"

<interactive>:1:27:
    lexical error in string/character literal at character 'S'

我猜它失败了,因为 Haskell 不理解 \S作为转义码。有没有办法解决这个问题?

在 Scala 中,您可以用 3 个双引号将字符串括起来,我想知道您是否可以在 Haskell 中实现类似的功能?

任何帮助,将不胜感激。

最佳答案

字符串中的每个反斜杠都必须写成双引号内的双反斜杠。所以

"\\b(((\\S+)?)(@|mailto\\:|(news|(ht|f)tp(s?))\\://)\\S+)\\b"

更一般的评论:你最好编写一个适当的解析器而不是使用正则表达式。正则表达式很少做完全正确的事情。

关于regex - Haskell中用于正则表达式的"Raw"字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6122445/

相关文章:

Haskell - 限制数据参数

python - 正则表达式:如何按 "="拆分而不是按 "!="拆分

java - 从末尾解析文本(使用正则表达式)

swift - 正则表达式不能快速工作

haskell - 可重置累加器行为?

haskell - Stack 尚未使用 GHC 和 Cabal 版本进行测试

javascript - 在 Sizzle(CSS 选择器引擎)中解释一段疯狂的 JS 代码

java - 为什么下面显示的代码中正则表达式模式匹配 "|"?

带有 foldr 的 Haskell 递归函数示例

haskell - 为什么我不能使用类型 `Show a => [Something -> a]` ?