2015-05-10 4 views
-1

Это код, который я читал на форуме.Что означает это регулярное выражение [^}] *

public String replaceVariables(String input, Map<String, String> context) { 
    if(context == null || input == null) 
     return input; 

    Matcher m = Pattern.compile("\\$\\{([^}]*)\\}").matcher(input); 
    // Have to use a StringBuffer here because the matcher API doesn't accept a StringBuilder -kg 
    StringBuffer sb = new StringBuffer(); 
    while(m.find()) { 
     String value = context.get(m.group(1)); 
     if(value != null) 
      m.appendReplacement(sb, value); 
    } 
    m.appendTail(sb); 
    return sb.toString(); 
} 

Я смущаюсь относительно [^}]*. Могу ли я использовать другой символ вместо }?

+0

Вы прочитали, например. http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html? –

+1

http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean/22944075#22944075 –

+3

Буквально: «любой символ, который не является закрывающей скобкой (' [^}] '), ноль или больше раз ('*') ". – fge

ответ

4

[] используется в регулярном выражении для обозначения набора символов.

^ обозначает не Оператор. Однако обратите внимание, что если ^ не является первым символом в наборе, это не будет рассматриваться как операция, а скорее как символ. Например, [1^2] соответствует 1, ^ и 2 (не 1 и ничего, что не 2) (спасибо @Maroun Maroun)

Поэтому [^}] обозначает набор символов, который, состоящих из символов, которые не являются }.

* означает, что могут быть бесконечные (включая нулевые) повторения набора.

+1

Хороший ответ, но вы можете добавить, что '*' допускает нулевые повторения. I.e, не обязательно должны быть какие-либо не-'' 'символы для регулярного выражения для соответствия строке. –

+1

Также обратите внимание, что если '^' не является первым символом, он потеряет его значение. Например, '[1^2]' соответствует 1,^и 2 (не 1 и ничего, что не 2). – Maroun

+0

Спасибо, Марун. Добавлено тоже. :) –

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