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