从re-seq的结果中获取字符串索引

时间:2014-01-17 16:35:10

标签: clojure

我目前正在使用re-seq来查找一段java源代码中的注释匹配。

(re-seq #"(?:/\*(?:[^*]|(?:\*+[^*/]))*\*+/)|(?://.*)" code)

如何在原始字符串code中获取匹配项的索引/索引?即找到原始字符串code的起点(和终点)。

1 个答案:

答案 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"})