我目前正在使用re-seq
来查找一段java源代码中的注释匹配。
(re-seq #"(?:/\*(?:[^*]|(?:\*+[^*/]))*\*+/)|(?://.*)" code)
如何在原始字符串code
中获取匹配项的索引/索引?即找到原始字符串code
的起点(和终点)。
答案 0 :(得分:2)
您可以使用必需的Java互操作修改re-seq
:
(defn re-seq-pos [pattern string]
(let [m (re-matcher pattern string)]
((fn step []
(when (. m find)
(cons {:start (. m start) :end (. m end) :group (. m group)}
(lazy-seq (step))))))))
实施例
(re-seq-pos #"\w+" "foo bar baz") ;=>
({:start 0, :end 3, :group "foo"}
{:start 4, :end 7, :group "bar"}
{:start 8, :end 11, :group "baz"})