2010-12-27 5 views
2

мне нужно проверить строка "\++?", которая будет соответствовать что-то вроде +6014456Java затмить регулярки косяка « +»

Но я получаю сообщение об ошибке invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\) .... почему?

+0

Я использую совпадения – wizztjh

+0

, отправляю вызов '.matches()'. Не очевидно, каковы ваши фактические аргументы. –

+0

InMessage.matches («\ ++?») – wizztjh

ответ

7

Это дает вам ошибку, потому что "\++?" не является допустимым Java буквальным - вам нужно, чтобы избежать обратной косой черты. Попробуйте это:

Pattern pattern = Pattern.compile("\\++?"); 

Однако, я не думаю, что это на самом деле регулярное выражение, которое вы хотите. Не вы на самом деле означает что-то вроде:

Pattern pattern = Pattern.compile("\\+\\d+"); 

Это соответствует регулярному выражению \+\d+, то есть плюс с последующим, по меньшей мере, одну цифру.

+0

спасибо! "+01445676" .matches ("\\ + \\ D +") – wizztjh

1

Я думаю, вы должны использовать две обратной косой черты. Один для экранирования второй (потому что это строка java), вторая для экранирования + (потому что это специальный символ для регулярного выражения).

+0

oops, 5 seconds:) – Nishant

+2

что для сообщества, 3 ответа за 1 минуту :) – fego

1

не должно быть больше похоже на «\\ +?» ?


Pattern pattern = Pattern.compile("\\++?"); 
System.out.println(pattern.matcher("+9970").find()); 

работает для меня

Смежные вопросы