1

私は2種類の文字列を持っています:

1) "bla bla <a>interesting</a> bla bzzz"
2) "bla bla <b>interesting bla bzzz"

必要なのは、できれば1つのパターンを使用して、「興味深い」部分文字列をキャプチャすることです。

これまでのところ、

public static void main(String[] args) {
    Pattern pattern = Pattern.compile("(<a>(.*?)</a>)|(<b>(.*?))");
    String message = "bzzzzzz <a>AaA</a>efwef<b>BbB";

    Matcher matcher = pattern.matcher(message);
    while (matcher.find()) {
        for (int i = 1; i <= matcher.groupCount(); i++) {
            System.out.println(matcher.group(i));
        }
    }
}

私が望む結果は

AaA
BbB

しかし、代わりに私は得ています

<a>AaA</a>
AaA
null
null
null
null
<b>

何か案は?ありがとう

4

1 に答える 1

2
<b>(.*?)

空の文字列に一致し、必要がなければそれ以上の一致を試みないため、常に一致<b>し、それ以外には何も一致しません。.*?また、正規表現には、必要以上に多くの括弧が含まれています。

試す

Pattern pattern = Pattern.compile("<a>(.*?)</a>|<b>(\\S*)");

このパターンの後半は、 の後の一連の非空白文字 ( \S) に一致します<b>

于 2013-05-17T09:21:53.200 に答える