как сгруппировать повторяющееся вхождение регулярного выражения, соответствующего шаблону

#java #regex

#java #регулярное выражение

Вопрос:

У меня есть следующая строка в Java

 59701=Application Development"">app dev</a>| <a href=""/search/search.asp?cdlCustomFieldValue001=Data Analytics (formerly Business Intelligence)"">Data Analytics (formerly Business Intelligence)</a>| <a href=""/search/search.asp?cdlCustomFieldValueID012=Small and Midmarket Cloud Solutions"">Small and Midmarket Cloud Solutions</a></td></tr><tr class=""CstmFldRow noVpad CfProfessional"" style=""""><td valign=""top""><label class=""CstmFldLbl"">
  

к которому мне нужно применить регулярное выражение, чтобы мне нужно было извлекать только тексты app dev, Data Analytics (ранее Business Intelligence) и облачные решения среднего уровня.

Я использовал следующее регулярное выражение

         String text_string= "59701=Application Development"">app dev</a>| <a href=""/search/search.asp?cdlCustomFieldValue001=Data Analytics (formerly Business Intelligence)"">Data Analytics (formerly Business Intelligence)</a>| <a href=""/search/search.asp?cdlCustomFieldValueID012=Small and Midmarket Cloud Solutions"">Small and Midmarket Cloud Solutions</a></td></tr><tr class=""CstmFldRow noVpad CfProfessional"" style=""""><td valign=""top""><label class=""CstmFldLbl"">";

        Pattern pattern_sub51 = Pattern.compile(""">(.*?)</a>");
        Matcher matchersub51 = pattern_sub51.matcher(text_string);
                 if(matchersub51.find())
                 {
                     store_variable=matchersub51.group(1).trim();

                 }
  

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

Комментарии:

1. while (matchersub51.find()) , не if(matchersub51.find()) .

2. @saka: шаблон OP работает как есть, просто if должен быть заменен на while ideone.com/uravDh . Возможно, проблема заключается в добавлении значений к результату, я бы рекомендовал список строк ( ideone.com/BW8yAY ).

Ответ №1:

да, как предложил @wiktor Stribizew, следующий код работает. Спасибо

 import java.util.*;
import java.util.regex.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String text_string= "59701=Application Development"">app dev</a>| <a href=""/search/search.asp?cdlCustomFieldValue001=Data Analytics (formerly Business Intelligence)"">Data Analytics (formerly Business Intelligence)</a>| <a href=""/search/search.asp?cdlCustomFieldValueID012=Small and Midmarket Cloud Solutions"">Small and Midmarket Cloud Solutions</a></td></tr><tr class=""CstmFldRow noVpad CfProfessional"" style=""""><td valign=""top""><label class=""CstmFldLbl"">";
        Pattern pattern_sub51 = Pattern.compile(""">(.*?)</a>");
        Matcher matchersub51 = pattern_sub51.matcher(text_string);
        List<String> res = new ArrayList<>();
        while(matchersub51.find())
        {
            res.add(matchersub51.group(1).trim());
        }
        System.out.println(res);
    }
}