web-dev-qa-db-ja.com

疑問符(?)を(\\?)に置き換えます

テキスト内の疑問符(?)と一致するパターンを定義しようとしています。正規表現では、疑問符は「一度かまったくない」と見なされます。 パターンの問題を修正するために、テキストの(?)記号を(\\?)に置き換えることはできますか?

String text = "aaa aspx?pubid=222 zzz";
Pattern p = Pattern.compile( "aspx?pubid=222" );
Matcher m = p.matcher( text );

if ( m.find() )
 System.out.print( "Found it." );
else
 System.out.print( "Didn't find it." );  // Always prints.
24
Brad

エスケープする必要があります? なので \\?正規表現内であり、テキスト内ではありません

Pattern p = Pattern.compile( "aspx\\?pubid=222" );

見る

quoteクラスのPatternメソッドを使用して正規表現のメタ文字を引用することもできますyouはそれらを引用することを心配する必要はありません:

Pattern p = Pattern.compile(Pattern.quote("aspx?pubid=222"));

見る

45
codaddict

Javaで正規表現のテキストをエスケープする正しい方法は、次のようにすることです:

String quotedText = Pattern.quote("any text goes here !?@ #593 ++ { [");

次に、正規表現の一部としてquotedTextを使用できます。
たとえば、コードは次のようになります。

String text = "aaa aspx?pubid=222 zzz";
String quotedText = Pattern.quote( "aspx?pubid=222" );
Pattern p = Pattern.compile( quotedText );
Matcher m = p.matcher( text );

if ( m.find() )
    System.out.print( "Found it." ); // This gets printed
else
    System.out.print( "Didn't find it." ); 
3
m_vitaly