JAva正規表現マッチングの取得

2727 ワード

例えば、aaabbbcccdddeeeafff f f f="16">fff f f f="16">fff f f="16">fff f f="16">fff
上のコードの意味はは必ずしもあるとは限らないし、colorの値も違うかもしれない.
package test1;
import java.util.regex.*;
public class Test6
{ 
    public static void main(String[] args)
    { 
        String s="<a href="11"> <font color="21">aaa </font> </a> "
                +"<a href="12"> <font color="22">bbb </font> </a> "
                +"<a href="13">ccc </a> "
                +"<a href="14"> <font color="23">ddd </font> </a>" 
                +"<a href="15"> <font color="25">eee </font> </a> "
                +"<a href="16">fff </a> ";
        String regex="<a.*?>(.*?)</a>";
         
        Pattern pt=Pattern.compile(regex);
        Matcher mt=pt.matcher(s);
        while(mt.find())
        {
            System.out.println(mt.group(1).replaceAll("<font.*?>|</font>", "").trim());
        }
    } 
} 

 
非キャプチャグループの使用
 
package test1;
import java.util.regex.*;
 
public class Test6 ...{
    public static void main(String[] args) ...{
        String str = "<a href="11"> <font color="21">aaa </font> </a>" +
                     "<a href="12"> <font color="22">bbb </font> </a>" +
                     "<a href="13">ccc </a> " +
                     "<a href="14"> <font color="23">ddd </font> </a>" +
                     "<a href="15"> <font color="25">eee </font> </a> " +
                     "<a href="16">fff </a> ";
        String regex = "<a.*?>(?:\s*<font[^>]*>)?(.*?)(?:</font>\s*)?</a>";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        while(matcher.find()) ...{
            System.out.println(matcher.group(1));
        }
    }
}