2013-01-29 7 views
2

Итак, у меня есть строка, которую я бы хотел разобрать, и я не могу заставить свое регулярное выражение работать. Я использую https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp как руководство по регулярному выражению.Java Regular Expression Match on +/-/* /%

Я хотел бы, чтобы мое регулярное выражение соответствовало любому из следующих символов.

+ - * %/

Мой код следующим образом. Строка ввода: D[1]+D[0]. Должен напечатать правду ... но принты ложные.

String tmp = "D[1]+D[0]"; 
if(tmp.matches("[\\+\\-\\*\\/\\%]")) 
    System.out.println("true"); 
else 
    System.out.println("false"); 

Любые идеи?

+0

Попробуйте использовать только 1 обратную косую черту, чтобы избежать символов. – Serdalis

+1

@Serdalis Для компилятора java требуется экранирование. Единственная обратная косая черта работает только для следующих последовательностей '\ b \ t \ n \ f \ r \" \ '\\ ' – Adam

+3

Первое, что нужно сделать, это понять, что ** Java не является Javascript! ** Таким образом, веб-ссылка для Javascript не обязательно будет настолько полезен для Java. Http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html должен быть вашим первым пунктом вызова для справочных целей . – paxdiablo

ответ

4

Это потому, что matches хочет, чтобы вся строка была согласована, а не какая-либо ее часть.

Вам не нужно избегать символов внутри квадратных скобок.

String str = "D[1]+D[0]"; 
Pattern p = Pattern.compile("[+-/*]"); 
Matcher m = p.matcher(str); 
if (m.find()) { 
    System.out.println("Found: " + m.group()); 
} 
+0

Вот демонстрация на идеоне: [link] (http://ideone.com/xJQmT0). – dasblinkenlight

+0

спасибо. Это то, что я искал. Я не знал о Матчи. Это то, что я искал! Мне также нравится, как вы можете передать params в 'group'. Также кажется, что '.find()' было бы полезно использовать, если у вас более сложная 'str' в вашем шаблоне. – Adam

+0

@Adam Вызов 'find' несколько раз позволяет найти следующее появление регулярного выражения. Вам нужно использовать круглые скобки для захвата нескольких групп. Дополнительную информацию об этом см. В документах regexp, библиотека очень мощная. – dasblinkenlight

0

matches() должен соответствовать весь вход, но все, что вам нужно сделать, это добавить .* к каждому концу:

if (tmp.matches(".*[-+*/%].*")) 

Примечание: Символы между [] не нужно избежать если дефис первый или последний.