正则表达式匹配括号“(”in string

时间:2015-01-24 19:14:52

标签: regex escaping scheme racket

我在使用Racket / Scheme中的正则表达式匹配字符串中的括号时遇到困难。我认为你必须逃避括号,因为它用于正则表达式中的其他东西,我试过:

(regexp-match #rx"(" "(")

(regexp-match #rx"\(" "(")

(regexp-match #rx"[\(]" "(")

这些似乎都不起作用。

3 个答案:

答案 0 :(得分:3)

是的,你必须要转义括号,但是在Racket中的regexp文字只是使用普通的字符串解析,所以必须转义反斜杠。

(regexp-match #rx"\\(" "(") ; => '("(")

答案 1 :(得分:2)

您需要在此处使用double escapes

(regexp-match #rx"\\(" "(")

答案 2 :(得分:0)

在Scheme中没有regexp-match(仅适用于#!racket)。但是,您有SRFI-115实现标准Scheme报告的正则表达式。有了这个RE实现,答案是这样的:

(regexp-matches? "(" "(") ; ==> #t

您不需要引用它的原因是因为Scheme正则表达式使用列表结构来表示复杂的匹配。例如:

(regexp-search '(w/nocase (~ ("Aab"))) "b") => #<regexp-match>