我似乎无法在 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/