2015-03-18 3 views
1

У меня есть это регулярное выражениерегулярное выражение возвратами к значению в матче

(\w*):([0-9]*).*\1:-([0-9]*) 

, который соответствует следующей строке

start foo:100 xxxxx bar:300 yyyyy bar:-600 jjjjjj foo:-200 end 

дает мне 3 группы

foo 
100 
200 

Как изменить регулярное выражение так Я получаю 2 матча, таких как

foo 
100 
200 

bar 
300 
600 
+0

Какой язык ** вы делаете это? – hwnd

ответ

1

Просто поместите ваше регулярное выражение в положительное утверждение, чтобы оно совпадало с совпадением.

(?=\b(\w+)\b:([0-9]+).*\1:-([0-9]*)) 

DEMO

1
(\w*):([0-9]+)(?=.*\1:-([0-9]*)) 

Попробуйте this.Once вы захватить или двигаться вперед регулярных выражения двигатель обыкновения backtrack.So вы можете захватить первую часть и положить остальные в опережающем просмотре и захват there.This способом двигателя будет просто утверждать, что впереди подобная группа, но она не движется вперед.

См. Демонстрационную версию.

https://regex101.com/r/bW3aR1/13

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