2014-01-17 2 views
1

В настоящее время я использую re-seq, чтобы найти совпадения комментариев внутри куска исходного кода java.Получить строковые индексы из результата re-seq

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

Как я могу получить индекс/индексы совпадений в исходной строке code? т. е. найти начальную (и конечную) точку исходной строки code.

ответ

2

Вы можете изменить re-seq с необходимой Java-взаимодействия:

(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"}) 
+0

Это частичное решение для иллюстративных целей. Он не спускается в подгруппы, как 're-seq'. Вам понадобится модифицированная (как указано выше) версия 're-groups', вместо которой вы будете вызывать из копии' re-seq'. –

Смежные вопросы