2015-08-14 4 views
1

Я работаю с REGEX на сложном JSON, представляющем объекты, каждый из которых представлен UUID. Проблема заключается в том, что REGEX, соответствующий каждому отдельному объекту, также соответствует более крупному шаблону. Возьмем, к примеру, следующее:REGEX дифференцируя внутреннее соответствие из внешнего соответствия

{_id:"(UUID)" value:"x"}(additional info here),{_id:"(UUID)" value:"y"}(additional info here) 

теперь, если я делаю шаблон, такие как /{_id:"(.+?)".+value:"(.+?)"}/g захватить идентификатор и значение каждого из них, а соответствие каждого из них по отдельности будет не соответствовать большую картину, что, будучи первый id и последнее значение?

Каков наилучший способ гарантировать, что каждая группа индивидуально вытягивается, а не более крупный узор, который также соответствует?

+0

Какое использование языка использует? В некоторых вы можете установить флаг для этого .. то есть в PHP это U '/../ gU' (где флаг' g' не существует в PHP ^^) –

+0

для тестирования регулярных выражений с использованием java –

+0

ОК, это не мой мир^^ но поиск: 'PCRE_UNGREEDY' –

ответ

1

Я был в состоянии понять это, Я не пользовался не-жадным "?" правильно. Мне удалось получить каждый из них по отдельности:

/{_id:"(.+?)".+?value:"(.+?)"}/g 
1

Проблема с вами REGEX /{_id:"(.+?)".+value:"(.+?)"}/g

, что .+ должен быть .+?

Так что теперь регулярное выражение:

{_id:"(.+?)".+?value:"(.+?)"}/g 

https://regex101.com/r/xK0qJ8/2

+0

Я думаю мы отправили в то же самое время, я приму ваше решение как правильный ответ. Я все еще пытаюсь понять, что? останавливается и когда –

+1

@DavidTorrey Обычно '?' сообщает вам, что regex останавливается, как только возможно. Поэтому в примере, подобном этому https://regex101.com/r/xK0qJ8/3, он прекратит матч, как только он увидит букву d. – m0meni

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