clojure - 如何在 Clojure 中比较两个正则表达式?

标签 clojure

我正在对一个构建正则表达式的函数进行单元测试,但使用 = 不起作用。如何测试它是否返回正确的正则表达式?

这是我尝试的空正则表达式:

(= #"" #"") ; 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/

相关文章:

Clojure lein-uberwar WEB-INF 中的附加内容

clojure - 如何获取 clojure 函数参数的元数据?

clojure - Clojure 中读取字符串和加载字符串的区别

javascript - 将任意 JavaScript 代码存储到字符串变量中

git - 在 Git Repo 中增量保存 Clojure 数据结构

clojure - 如何编写 Clojure 宏来获取 var 的值?

clojure - Clojure WebSocket客户端

clojure - Clojure 程序员如何使用宏?

parsing - 如何将 instaparse 输出转换为可以评估的函数?

functional-programming - 返回前 X 位设置的数字