我正在尝试使用网址正则表达式来匹配Racket中的网址,如下所示:
(regexp-match #rx"((mailto\:|(news|(ht|f)tp(s?))\:\/\/){1}\S+)" "www.test.com/")
问题是我收到此错误:read: unknown escape sequence \: in string
。我该怎么做才能纠正这个问题?
现在我正在尝试这个:
(regexp-match #px"((mailto:|(news|(ht|f)tp(s?))://){1}\S+)" "www.youtube.com/watch?v=I0r4Wo2Q3l4")
现在我收到了这个错误:read: unknown escape sequence \S in string
答案 0 :(得分:4)
您的代码存在许多问题。首先,正如其他人所指出的那样,你不需要逃避冒号角色。
其次,您需要使用#px
来启动使用perl-regexp扩展的正则表达式,就像您所做的那样。
最后,你在输入中遗漏了“http://”,使其与模式匹配。
这是一个有效的例子:
#lang racket
(regexp-match #px"((mailto:|(news|(ht|f)tp(s?))://){1}\\S+)"
"http://www.test.com/")
运行此代码会产生:
'("http://www.test.com/" "http://www.test.com/" "http://" "http" "ht" "")
答案 1 :(得分:2)
\:是一个不正确的scape序列,因为:你不想写一个特殊字符。?