我正在对一个构建正则表达式的函数进行单元测试,但使用 =
不起作用。如何测试它是否返回正确的正则表达式?
这是我尝试的空正则表达式:
(= #"" #"") ; false
(== #"" #"") ; ClassCastException java.util.regex.Pattern cannot be cast to java.lang.Number
(identical? #"" #"") ; false
(.equals #"" #"") ; false
是否有类似 Clojure 的方法可以做到这一点,或者我是否必须将两个正则表达式转换为字符串然后比较它们?
最佳答案
不幸的是没有更好的方法,你只需要使用字符串
user> (= (str #"foo") (str #"foo"))
true
user> (= (str #"foo") (str #"fooo"))
false
即使这样也并不完美,因为它无法捕获与相同字符串匹配但看起来不同的正则表达式。
user> (re-seq #"[a]" "aaaa")
("a" "a" "a" "a")
user> (re-seq #"a" "aaaa")
("a" "a" "a" "a")
user> (= (str #"a") (str #"[a]"))
false
这与您也无法比较函数是否相等的原因相同。我怀疑 Clojure 不会为正则表达式实现 ==
,因为确定两个正则表达式是否匹配相同的字符串(或其他一些相等的想法)是不切实际的。
关于clojure - 如何在 Clojure 中比较两个正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21894371/