Подтвердить что ты не робот

Замените знак вопроса (?) На (\\?)

Я пытаюсь определить шаблон для соответствия тексту с вопросительным знаком (?) внутри него. В регулярном выражении знак вопроса считается "раз или нет". Итак, могу ли я заменить знак (?) в тексте на (\\?), чтобы исправить проблему с шаблоном?

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.
4b9b3361

Ответ 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." );