Javaでは、最終的な部分文字列に区切り文字を含めずに、両側に正規表現区切り文字を指定して部分文字列を抽出する簡単な方法はありますか?
たとえば、次のような文字列があるとします。
<row><column>Header text</column></row>
部分文字列を抽出する最も簡単な方法は何ですか:
Header text
部分文字列には改行が含まれている可能性があることに注意してください...
ありがとう!
次のような正規表現を記述します。
"(regex1)(.*)(regex2)"
...そしてマッチャーから中間グループを引き出します(パターン内の改行を処理するには、Pattern.DOTALLを使用します)。
あなたの例を使用して、次のようなプログラムを作成できます。
package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
Pattern p = Pattern.compile(
"<row><column>(.*)</column></row>",
Pattern.DOTALL
);
Matcher matcher = p.matcher(
"<row><column>Header\n\n\ntext</column></row>"
);
if(matcher.matches()){
System.out.println(matcher.group(1));
}
}
}
実行時に出力されるもの:
Header
text
XML のデコードに正規表現を使用しないでください。入力が厳密に制御されていないと、最終的には機能しなくなります。
おそらく最も簡単な方法は、XML を DOM ツリー (Java 1.4 以降には XML パーサーが直接含まれています) で解析し、ツリーをナビゲートして必要なものを選択することです。
おそらく、プログラムで何を達成したいのかを伝えたいですか?