我正在尝试定义一个匹配文本的模式,并在其中加上问号(?)。在正则表达式中,问号被认为是“一次或根本没有”。 我可以用(\\?)替换文本中的(?)符号来修复模式问题吗?
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.
答案 0 :(得分:41)
您需要在{strong> 正则表达式中将?
转换为\\?
,而不是在文本 中转义。
Pattern p = Pattern.compile( "aspx\\?pubid=222" );
您还可以使用quote
类的Pattern
方法引用正则表达式元字符,这样 您 不需要不得不担心引用它们:
Pattern p = Pattern.compile(Pattern.quote("aspx?pubid=222"));
答案 1 :(得分:3)
在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." );