

Javaの正規表現について教えてください。

[code]

    <HTML><HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-8"></HEAD><BODY><DIV style="background-color: ;text-align:left;word-break:break-all;word-wrap:break-word;"><DIV><SPAN style="color:#0041c2;"><STRONG>test_1</STRONG></SPAN><SPAN><A href="dummy_1">[file_name_1]</A></SPAN></DIV><DIV><SPAN style="font-family:HGP創英角ｺﾞｼｯｸUB;font-size:32px;"><STRONG>test_2</STRONG></SPAN><SPAN><A href="dummy_2">[filename_2]</A></SPAN><SPAN><STRONG>test_3</STRONG></SPAN><SPAN style="font-family:HGP創英角ｺﾞｼｯｸUB;font-size:32px;">test_4</SPAN></DIV></BODY></HTML>
    
[/code]

上記のようなコードがある場合にjavaの正規表現を使って`<span>`タグから`</span>`で区切りたいのですが、どのようにすればいいでしょうか。

[code]

    <SPAN style="color:#0041c2;"><STRONG>test_1</STRONG></SPAN>
    <SPAN><A href="dummy_1">[file_name_1]</A></SPAN>
    <SPAN style="font-family:HGP創英角ｺﾞｼｯｸUB;font-size:32px;"><STRONG>test_2</STRONG></SPAN>
    <SPAN><A href="dummy_2">[filename_2]</A></SPAN>
    <SPAN><STRONG>test_3</STRONG></SPAN>
    <SPAN style="font-family:HGP創英角ｺﾞｼｯｸUB;font-size:32px;">test_4</SPAN>
    
[/code]

のように取り出したいです。

`<span(\"[^\"]*\"|'[^']*'|[^'\">])*>(\"[^\"]*\"|'[^']*'|[^'\">])*<(\"[^\"]*\"|'[^']*'|[^'\">]).*?/span>`

のように指定をしているのですがうまくいきません。


CC BY-SA 4.0
2018-10-24T10:49:38.503
49614
2018-10-25T05:20:59.527
2018-10-24T16:32:06.953
3060
30671
question
java html 正規表現
HTMLを対象とした、Javaでの正規表現について


`<span(\"`のように記述すると、`<span "～`などのスペースが考慮されずに`<span"`のみマッチします。

下記のサンプルコードは`<span>`や`<span ～`を考慮した正規表現の例です。  
正規表現の`\\s`はスペースやタブ文字を表す『空白文字』です。  
`?`はマッチする長さを最小限に短くする『最短一致数量子』です。

[code]

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Main {
    
        public static void main(String[] args) {
            String html = "<HTML><HEAD><META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></HEAD><BODY><DIV style=\"background-color: ;text-align:left;word-break:break-all;word-wrap:break-word;\"><DIV><SPAN style=\"color:#0041c2;\"><STRONG>test_1</STRONG></SPAN><SPAN><A href=\"dummy_1\">[file_name_1]</A></SPAN></DIV><DIV><SPAN style=\"font-family:HGP創英角ｺﾞｼｯｸUB;font-size:32px;\"><STRONG>test_2</STRONG></SPAN><SPAN><A href=\"dummy_2\">[filename_2]</A></SPAN><SPAN><STRONG>test_3</STRONG></SPAN><SPAN style=\"font-family:HGP創英角ｺﾞｼｯｸUB;font-size:32px;\">test_4</SPAN></DIV></BODY></HTML>";
    
            Pattern p = Pattern.compile("<SPAN[>\\s].+?</SPAN>");
            Matcher m = p.matcher(html);
            while(m.find()) {
                System.out.println(m.group());
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2018-10-24T11:52:25.807
49616
2018-10-24T11:52:25.807
9820
49614
answer