Замените знак вопроса (?) На (\\?)
Я пытаюсь определить шаблон для соответствия тексту с вопросительным знаком (?) внутри него. В регулярном выражении знак вопроса считается "раз или нет". Итак, могу ли я заменить знак (?) в тексте на (\\?), чтобы исправить проблему с шаблоном?
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.
Ответы
Ответ 1
Вам нужно избежать ?
как \\?
в регулярном выражении , а не в тексте.
Pattern p = Pattern.compile( "aspx\\?pubid=222" );
Посмотрите
Вы также можете использовать метод quote
класса Pattern
для цитирования метасимволов регулярных выражений, поэтому вам не нужно беспокоиться о цитировании их:
Pattern p = Pattern.compile(Pattern.quote("aspx?pubid=222"));
Посмотрите
Ответ 2
Правильный способ избежать любого текста для регулярного выражения в java заключается в использовании:
String quotedText = Pattern.quote("any text goes here [email protected] #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." );