如何知道这个正则表达式代表什么

时间:2013-05-06 16:40:37

标签: java regex

我正在维护一些代码,我看到像someString.matches("\\$\\{.*}")这样的正则表达式。我知道java中的反斜杠正在逃避反斜杠。 $表示行尾,{}表达式表示预期的字符串。
所以我相信(虽然现在我知道我错了)这个正则表达式是过滤字符串末尾有点的字符串并且采用这种格式:It seems to be.a.beautiful.day但我错了。有人可以指点我理解这个正则表达式可以解析什么?

3 个答案:

答案 0 :(得分:4)

反斜杠字符(\)正在转义美元符号($)和大括号({),因此它们不会被视为特殊字符,因此此正则表达式将匹配一个字面的美元符号后面紧跟一个花括号,后跟任意数字的任何字符,后跟一个结束的大括号(})。

这将匹配的一些例子:

  • $ {9.00}
  • $ {}
  • $ {{{{{{{{{{{{{{{{{{{{{{{}
  • $ {}}}}}}}}}}}}}}}}}}}}}}}

答案 1 :(得分:2)

Java编译器接受此字符串"\\$\\{.*}"并用单斜杠替换双斜杠,因此regexp引擎会看到:

\$\{.*}

这意味着一个字符串以美元符号$开头,后跟花括号中的零个或多个字符序列。

编写类似表达式的更好方法如下:

\$\{[^}]*}

(您需要转义Java编译器的反斜杠)。在看到第一个结束大括号后,此表达式将停止,并避免braktracking

答案 2 :(得分:1)

"\\$\\{.*}"

对字符串进行编码

\$\{.*}

因为Java编译器在到达正则表达式库之前会解释\\

当用作正则表达式时,它会匹配文字${,后跟任意数量的非换行符,直到最后一个文字}