2017-02-17 6 views
0

Java Patternクラスを使用して文字列を一致させようとしています。提供された単語と特殊文字を一致させるJava正規表現

private boolean isMatch(String searchSentence, String matchWord) { 
     String patternText = ".*\\b"; 
     Pattern pattern = Pattern.compile(patternText + matchWord + "\\b.*",Pattern.CASE_INSENSITIVE); 
     Matcher matcher = pattern.matcher(searchSentence); 
     return matcher.matches(); 
    } 

私は({[など

私は「RANCH」なく「RANCHを(見つけることができる午前などの特殊文字が含まれていない一致文字列を、持っている場合、これは動作しますEAGLEFORD) "

さらにいくつかの例

  1. は私の入力文字列があるとしましょう:。" ポイント[-99.73586,28.38092]」それから私は、を検索することができるはず 『-99.73586,28.38092』
  2. は私の入力文字列があるとしましょう:『ポイントは、[-99.73586,28.38092]』、私はできるはずです「Rench RenchY」、私は「Rench」を検索することができるはずですが、RenchYはの一部であってはならない:を検索するために、「[-99.73586,28.38092]」
  3. は私の入力文字列があるとしましょう検索結果。 どうすればこれらのタイプのケースを処理できますか。正規表現

    文字列stringToSearch = "私はRANCH(EAGLEFORD)とRANCH {} EAGLEFORDにしようとしていますいくつかの長い文字列" で

+5

サンプル入力とは何ですか?あなたは何をしようとしていますか? – TheLostMind

+0

あなたのための単語境界は何ですか? 「単語」は空白以外の文字の単なる塊ですか? ')'は単語の文字ではなく、 '\ b'の後にかっこの直後に単語charが必要であることに注意してください。もう一つの問題は 'Pattern.quote(matchWord)'を使う必要があるということです。 –

+0

「Pattern.compile( "。*(?<!\\ S)" + Pattern.quote(matchWord)+ "(?!\\ S)。*"、Patternを試してみましょう。 CASE_INSENSITIVE) ' –

答えて

0

({})特殊文字の使用例。

Pattern p1 = Pattern.compile("RANCH\\s[(){}\\w]+"); 

Matcher m = p1.matcher(stringToSearch); 

while (m.find()) 
{ 
    System.out.println(m.group()); 
} 

出力:

RANCH(EAGLEFORD) RANCH {EAGLEFORD}

0

あなたは単語文字(文字、数字、またはアンダースコア)、使用に囲まれていないキーワードに一致するように計画している場合\bの代わりに(?<!\w)(?!\w)のように見てください。

private boolean isMatch(String searchSentence, String matchWord) { 
    Pattern pattern = Pattern.compile("(?<!\\w)" + Pattern.quote(matchWord) + "(?!\\w)", Pattern.CASE_INSENSITIVE); 
    Matcher matcher = pattern.matcher(searchSentence); 
    return matcher.find(); 
} 

あなただけ(?<!\S)(?!\S)前後参照/空白で囲まれたマッチを見つける文字列の開始/終了、使用する予定の場合は

private boolean isMatch(String searchSentence, String matchWord) { 
    Pattern pattern = Pattern.compile("(?<!\\S)" + Pattern.quote(matchWord) + "(?!\\S)", Pattern.CASE_INSENSITIVE); 
    Matcher matcher = pattern.matcher(searchSentence); 
    return matcher.find(); 
} 

あなたのリテラル文字列をPattern.quoteすることを忘れないでください。

Matcher#findを使用すると、最初/末尾に.*が不要で、正規表現のバックトラックメカニズムに関連する不要なオーバーヘッドがなくなるので、これが望ましいです。

関連する問題