以这种方式使用重新查找时:
(re-find #"(\d{3})" "abc1245")
我明白了:
["124" "124"]
当我期待一个值时。发生了什么事?
答案 0 :(得分:3)
这是因为括号创建了一个正则表达式" group"。见
例如。这就是区别:
(re-find #"(\d{3})" "abc1245") => ["124" "124"] ; #1
(re-find #"\d{3}" "abc1245") => "124" ; #2
(re-seq #"\d{3}" "abc1245") => ("124") ; #3
(re-seq #"\d{3}" "abc12345678") => ("123" "456") ; #4
因此,#1为您提供了结果和"组结果"。 #2为您提供匹配的子字符串。
#3为您提供所有比赛的序列。因为只有4位数字,所以剩下的#3; 5"不足以匹配3位数。
#4总共得到8位数字,因此我们得到"123"
和"456"
作为匹配,7&因为我们只需要三位数字,所以剩下8个。
答案 1 :(得分:2)
正则表达式(\d{3})
中的圆括号定义了一个捕获组,因此re-find
返回整个匹配和所有匹配组。
根据{{3}}:
使用返回下一个正则表达式匹配的正则表达式匹配(如果有) java.util.regex.Matcher.find()。使用重组返回组。
如果删除括号 - 您将只获得一个符合预期的匹配:
=> (re-find #"\d{3}" "abc1245")
=> "124"
=> (re-find #"(\d{3})" "abc1245")
=> ["124" "124"]
您可以在re-find doc。
中自行查看