0

以下では、私は取得する必要があります:

String regex = "Item#: <em>.*</em>";
String content = "xxx Item#: <em>something</em> yyy";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content); 

if( matcher.find() ) {
    System.out.println(matcher.group());
}

それは印刷されます:

Item#: <em>something</em>

しかし、私は「何か」という値が必要です。

.substring(begin,end) を使用して値を取得できることはわかっていますが、よりエレガントな別の方法はありますか?

4

1 に答える 1

2

印刷したため、文字列全体が印刷されます。matcher.group()完全一致を出力します。一致した文字列の特定の部分を取得するには、正規表現を変更して、グループ内のタグ間のコンテンツをキャプチャする必要があります: -

String regex = "Item#: <em>(.*?)</em>";

また、Reluctant量指定子(.*?)を使用して、 が検出される前の最小文字数に一致させ</em>ます。

そして、ifでは、group(1)代わりに印刷しますgroup()

if( matcher.find() ) {
    System.out.println(matcher.group(1));
}

Regexとにかく、 parse には使用しないでくださいHTML。正規表現は、このタスクを達成するのに十分強力ではありません。おそらくHTML- のようなパーサーを使用する必要がありますHTML Cleaner。OPのコメントの1つで提供されているリンクも参照してください。その投稿は、直面する可能性のある問題の非常に優れた説明です。

于 2012-11-26T07:47:24.660 に答える