Racket中的URL正则表达式

时间:2012-02-27 23:20:48

标签: regex url racket

我正在尝试使用网址正则表达式来匹配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

2 个答案:

答案 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序列,因为:你不想写一个特殊字符。?