2015-01-28 2 views
1

У меня, похоже, отношения с любовью/ненавистью с RegEx в том, что мне нравится, насколько это невероятно мощно, но в то же время я не совсем понимаю все нюансы этого все же.RegEx, чтобы получить ВСЕ строки между двумя строками

У меня довольно длинный канал JSON, который мне нужно разобрать и захватить ВСЕ из совпадений между двумя конкретными строками. Я включил a link to the regex101.com example с несколькими результатами JSON.

regex101.com Example

Я пытаюсь соответствовать каждой строке между каждым /content/usergenerated и /jcr:content

...

Я предполагаю, что я должен быть действительно пытаюсь соответствовать строка, которая начинается с /content/webAppName/en/home и заканчивается до/jcr:content

Путь, который меня волнует, всегда будет art с /content/webAppName/en/home

+2

Ваше регулярное выражение работает, вам просто нужно извлечь из него первое совпадение, как показано на панели «Матч» справа. –

+0

«У меня, похоже, отношения с любовью/ненавистью с RegEx»: не волнуйтесь, это единственная настоящая любовь. –

+0

Моя самая большая проблема, которая была определена ниже, заключалась в том, что я не использовал глобальный модификатор. Я чувствую себя довольно глупо об этой ошибке. Doh! – Gdubz

ответ

1

вы должны использовать «позитивный взгляд вперед», которые соответствуют последовательности цифр, если они следуют что-то https://regex101.com/r/fU1iD1/4

+0

более компактная версия https://regex101.com/r/fU1iD1/5 – Mulder90

+1

Ваша более компактная версия отлично работает, спасибо! – Gdubz

0

Просто оберните две вещи, которые вы хотите удалить в скобках, а затем удалите их из вывода. Так что ...

(\/content\/usergenerated)(.*)(\/jcr\:content)

заменен

/2

Который есть все, что в середине этих двух.

Редактировать: Извините, не посмотрел на ваш пример :) - был удаленный ответ, который сказал, чтобы добавить модификатор g, который выглядит так, как будто он работает.

+0

Это работает также, хотя оно возвращает больше, чем мне действительно нужно. Ответ Mulder90 - это то, что я должен был делать с самого начала. Все равно спасибо! – Gdubz

0

/содержание/UserGenerated/содержание/webAppName/EN/дома ([а-запорожец Z/-] +)/jcr: содержание

Это должно сработать. Он соответствует 3 из 4, не знаю, почему он не соответствует одному из них. Вы можете использовать exec() в цикле, пока он не вернет null и не удержит объект [1], который содержит данные для первой и единственной группы захвата.

все лучшее.

PS: Я использовал gmi в вариантах для регулярного выражения.

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