2016-10-28 2 views
3

Помогите мне создать хорошее регулярное выражение. У меня есть такая строка: 'text&variable=tekst2&categories=metal;wood&author:elvis;arnold' Мне нужно получить все категории в виде разделенных строк, поэтому результат должен быть 2 строки: 'metal' и 'wood'. Если это была три или четыре категории, результат должен состоять из трех или четырех разделенных строк.Regex для моей строки запроса соответствует только одному значению

Я создал свои реги, но дал только одну строку.

/(?<=&categories=).*?([^;&]+)/ 

онлайн демо есть: https://regex101.com/r/G6pRUQ/2

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

+0

Попробуйте ['' ~ (?: \ G (?! \ A); * | [&?] Categories =) \ K [^; &] + ~ ''] (https: // regex101. ком/г/G6pRUQ/4). –

ответ

2

PCRE регулярное выражение, чтобы соответствовать категории, как несколько матчей, используйте

(?:\G(?!\A);*|[&?]categories=)\K[^;&]+ 

См regex demo.

Детали:

  • (?:\G(?!\A);*|[&?]categories=) - матч & или ?, categories=, или конец предыдущего успешного матча и 0+ полуприцепы колоны
  • \K - опускаем текст, совпадающий до сих пор
  • [^;&]+ - 1 или более символов, кроме ; и &.
0

Я не уверен, какой язык вы используете, но в Java я хотел бы пойти на следующий код:

String str = "text&variable=tekst2&categories=metal;wood&author:elvis;arnold"; 
Pattern pattern = Pattern.compile("&categories=(.*?)&"); 
Matcher matcher = pattern.matcher(); 
ArrayList<String> categories = new ArrayList<>(); 
while(matcher.find()){ 
    categories.add(matcher.group(1)); 
} 

Пожалуйста, проверьте синтаксис языка, который вы используете. Но базовая логика будет аналогична предыдущей.

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