3

Javaに特定のテキストがあり、パターンとマッチャーを使用してそこから何かを抽出したいと思います。これは私のプログラムです:

public String getItemsByType(String text, String start, String end) {

    String patternHolder;
    StringBuffer itemLines = new StringBuffer();

    patternHolder = start + ".*" + end;

    Pattern pattern = Pattern.compile(patternHolder);
    Matcher matcher = pattern.matcher(text);

    while (matcher.find()) {
        itemLines.append(text.substring(matcher.start(), matcher.end())
                + "\n");
    }

    return itemLines.toString();
}

このコードは、検索されたテキストが同じ行にある場合に完全に機能します。たとえば、次のようになります。

String text = "My name is John and I am 18 years Old"; 

getItemsByType(text, "My", "John");

すぐにテキストから「私の名前はジョンです」というテキストを取得します。ただし、私のテキストが次のようになっている場合:

String text = "My name\nis John\nand I'm\n18 years\nold"; 

getItemsByType(text, "My", "John"); 

「マイ」と「ジョン」は別の行にあるので、何も取得しません。どうすればこれを解決できますか?

4

2 に答える 2

7

代わりにこれを使用してください:

Pattern.compile(patternHolder, Pattern.DOTALL);

javadocから、DOTALLフラグは次のことを意味します。

dotallモードを有効にします。

dotallモードでは、式。ラインターミネータを含むすべての文字に一致します。デフォルトでは、この式はラインターミネータと一致しません。

于 2012-03-30T11:32:15.343 に答える
1

Pattern.compile(patternHolder, Pattern.DOTALL)パターンをコンパイルするために使用します。このようにして、ドットは改行と一致します。デフォルトでは、改行は特別な方法で処理され、ドットと一致しません。

于 2012-03-30T11:31:25.593 に答える