3

次のJavaコードでは:

public static void main(String[] args) {
        String largeText = "abc myphrase. def";
        String phrase = "myphrase.";
        Pattern myPattern = Pattern.compile("\\b"+Pattern.quote(phrase)+"\\b");
        System.out.println("Pattern: "+myPattern);
        Matcher myMatcher = myPattern.matcher( largeText );
        boolean found = false;
        while(myMatcher.find()) {
          System.out.println("Found: "+myMatcher.group());
          found = true;
        }
        if(!found){
            System.out.println("Not found!");
        }
}

私はこの出力を取得します:

Pattern: \b\Qmyphrase.\E\b
Not found!

上記のパターンで一致しない理由を誰かに説明してもらえますか?「myphrase」の代わりに「myphrase」を使用すると、一致します。パターンで。

ご協力ありがとうございました。

4

3 に答える 3

4

. 単語文字と非単語文字の間にA境界が発生した後、境界はありません。.と(スペース)は両方とも" "単語以外の文字であるため、それらの間に境界はありません。

パターンで「myphase」を使用すると、単語の文字eと。の間に境界があるため、一致が得られます.

于 2012-06-01T00:15:41.053 に答える
1

ドット(.)は「単語」文字とは見なされないため、一致しません。したがって、リテラルドットの後に単語の境界はありません(次の文字がスペースの場合)。

参考までに、「単語」文字(独自の正規表現を持つ\w)は文字クラスと同等です[a-zA-Z0-9_]

于 2012-06-01T00:17:00.720 に答える
0

おそらく、\bではなく\sを使用しようとしていますか?

于 2012-06-01T02:17:20.480 に答える