gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:47:04 24 4
gpt4 key购买 nike

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com