1

改行文字を含む文字列があります...

str = "Hello\n"+"Batman,\n" + "Joker\n" + "here\n"

特定の単語 say ..を使用Jokerして文字列内に 存在することを見つける方法を知りたいと思いますstrjava.lang.String.matches()

改行文字を削除すると、それstr.matches(".*Joker.*")が返さfalseれ、返されることがわかりました。trueでは、への引数として使用される正規表現は何でしょうstr.matches()か?

一つの方法は...str.replaceAll("\\n","").matches(.*Joker.*);

4

3 に答える 3

2

問題は、デフォルトでドットが.*改行と一致しないことです。改行を一致させたい場合は、正規表現にフラグが必要Pattern.DOTALLです。

正規表現で使用される正規表現にそれを埋め込みたい場合は、次.matches()のようになります。

"(?s).*Joker.*"

ただし、これも一致することに注意してくださいJokers。正規表現には単語の概念がありません。したがって、正規表現はのようにする必要があります。

"(?s).*\\bJoker\\b.*"

ただし、正規表現はすべての入力テキストと一致する必要はなく (.matches()直観に反して、一致する必要があります)、必要なものだけが一致します。したがって、このソリューションはさらに優れており、以下を必要としませんPattern.DOTALL

Pattern p = Pattern.compile("\\bJoker\\b"); // \b is the word anchor

p.matcher(str).find(); // returns true
于 2013-07-11T07:46:10.203 に答える
1

ドットが改行にも一致する必要があることを示す DOTALL フラグを使用するパターンを使用したいとします。

String str = "Hello\n"+"Batman,\n" + "Joker\n" + "here\n";

Pattern regex = Pattern.compile("".*Joker.*", Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(str);
if (regexMatcher.find()) {
    // found a match
} 
else
{
  // no match
}
于 2013-07-11T07:50:15.843 に答える
1

もっと簡単なことをすることができます。これはcontainsです。正規表現の力は必要ありません。

public static void main(String[] args) throws Exception {
    final String str = "Hello\n" + "Batman,\n" + "Joker\n" + "here\n";
    System.out.println(str.contains("Joker"));
}

Patternまたは、 aとを使用できますfind

public static void main(String[] args) throws Exception {
    final String str = "Hello\n" + "Batman,\n" + "Joker\n" + "here\n";
    final Pattern p = Pattern.compile("Joker");
    final Matcher m = p.matcher(str);
    if (m.find()) {
        System.out.println("Found match");
    }
}
于 2013-07-11T07:47:47.023 に答える