3

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

4

3 回答 3

4

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

这将匹配的一些示例:

  • ${9.00}
  • ${}
  • ${{{{{{{{{{{{{{{{{{{{{{}
  • ${}}}}}}}}}}}}}}}}}})}}}}
于 2013-05-06T16:44:49.957 回答
2

Java 编译器采用此字符串"\\$\\{.*}"并用单斜杠替换双斜杠,因此正则表达式引擎会看到:

\$\{.*}

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

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

\$\{[^}]*}

(您需要为 Java 编译器转义反斜杠)。这个表达式会在看到第一个右花括号后停止,并避免braktracking

于 2013-05-06T16:45:01.603 回答
1
"\\$\\{.*}"

对字符串进行编码

\$\{.*}

因为Java编译器\\在他们进入正则表达式库之前解释了。

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

于 2013-05-06T16:45:03.503 回答