Экранирование строки из анализа регулярного выражения в Java

Попробуйте это при настройке libcurl

./configure --with-ssl --with-libssl-prefix=/usr/local/ssl

/usr/local/ssl, где openssl содержит файлы заголовков и библиотеки

/usr/local/ssl/
├── bin
├── certs
├── include
├── lib
├── man
├── misc
├── openssl.cnf
└── private
13
задан doodaddy 3 October 2008 в 20:35
поделиться

6 ответов

String.contains не использует regex, таким образом, нет проблемы в этом случае.

, Где regex требуется, довольно отклоняющие строки с regex специальными символами, java.util.regex использования. Pattern.quote для выхода из них.

20
ответ дан Tom Hawtin - tackline 3 October 2008 в 20:35
поделиться
  • 1
    Это не надлежащее решение, потому что пунктуация изменяется. Все точки, точки с запятой и т.д. находятся на неправильной стороне. – Marcin 20 December 2013 в 13:31

Regex использует символ обратной косой черты '\' для выхода из литерала. Учитывая, что Java также использует символ обратной косой черты, необходимо было бы использовать двойной bashslash как:

   String S = "\\[hi"

, Который станет Строкой:

  \[hi

, который будет передан regex.

Или если Вы только заботитесь о литеральной строке и не нуждаетесь в regex, Вы могли бы сделать следующее:

if (T.indexOf("[hi") != -1)  {
0
ответ дан Aaron 3 October 2008 в 20:35
поделиться

Как сказал Tom Hawtin , необходимо заключить шаблон в кавычки. Можно сделать это двумя способами (редактирование: на самом деле три пути, как указано диастрофизм ):

  1. Окружают строку "\Q" и "\E", как:

    if (T.matches("\\Q" + S + "\\E"))
    
  2. Использование Шаблон вместо этого. Код был бы чем-то вроде этого:

    Pattern sPattern = Pattern.compile(S, Pattern.LITERAL);
    if (sPattern.matcher(T).matches()) { /* do something */ }
    

    Таким образом, можно кэшировать скомпилированный Шаблон и снова использовать его. При использовании того же regex несколько раз Вы почти наверняка хотите сделать это этот путь.

Примечание, что при использовании регулярных выражений, чтобы протестировать, является ли строка в большей строке, необходимо поместить.* в запуск и конец выражения. Но это не будет работать при заключении в кавычки шаблона так как он будет тогда искать фактические точки. Так, действительно ли Вы абсолютно уверены, что хотите использовать регулярные выражения?

12
ответ дан Community 3 October 2008 в 20:35
поделиться

Попробуйте Pattern.quote (Строка) . Это согласует что-либо, что имеет особое значение в строке.

6
ответ дан Diastrophism 3 October 2008 в 20:35
поделиться

Какая-либо конкретная причина не использовать String.indexOf () вместо этого? Тем путем это будет всегда интерпретироваться как обычная строка, а не regex.

2
ответ дан Jay 3 October 2008 в 20:35
поделиться
  • 1
    никакое преступление, но это неправильно: текст - выравнивается, значение можно только оставить, право, центр, выровнять по ширине или наследоваться – Samuel Rossille 21 May 2012 в 14:13

T.contains () (согласно javadoc: http://java.sun.com/javase/6/docs/api/java/lang/String.html ), не использует regexes., содержит () делегатов в indexOf () только.

Так, нет НИКАКИХ regexes, используемых здесь. Вы думали о некотором другом Строковом методе?

0
ответ дан anjanb 3 October 2008 в 20:35
поделиться
  • 1
    @user1125062 that' s не способ говорить как этот – sandeep 21 May 2012 в 11:48
Другие вопросы по тегам:

Похожие вопросы: