我正在尝试使用Java中的Regexes解析以下内容。
My Test String包含"${}"
内的字符串,例如ex "Test ${template} in ${xyz} : ${abc}"
我正在尝试使用(\$\{[^\}]+\})
形式的正则表达式来匹配它。当前正则表达式与测试字符串中的任何内容都不匹配。
如果我添加(.*?)(\$\{[^\}]+\})(.*?)
以使其不合适,那么在给我任何我想要匹配的内容时实际上并不一致。
我的正则表达式有什么问题?我该如何解决?
答案 0 :(得分:6)
大多数时候,当有人提出正则表达式问题时,我要求他们至少考虑Commons Lang StringUtils:
String[] names = substringsBetween(theString, "${", "}");
答案 1 :(得分:4)
public static void main(String[] args) throws Exception {
String test = "Test ${template} in ${xyz} : ${abc}";
Matcher m = Pattern.compile("\\$\\{[^\\}]+\\}").matcher(test);
while (m.find())
System.out.println(m.group());
}
输出:
${template}
${xyz}
${abc}
答案 2 :(得分:1)
你可能也必须逃避括号:
jcomeau@intrepid:/usr/src/clusterFix$ python
Python 2.6.7 (r267:88850, Jun 13 2011, 22:03:32)
[GCC 4.6.1 20110608 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> s = 'Test ${template} in ${xyz} : ${abc}'
>>> re.compile('\$\{[^}]+\}').findall(s)
['${template}', '${xyz}', '${abc}']
答案 3 :(得分:1)
String test = "Test ${template} in ${xyz} : ${abc}";
Pattern p = Pattern.compile("\\$\\{[^}]+\\}");
Matcher matcher = p.matcher(test);
while (matcher.find()) {
System.out.println(matcher.group());
}
答案 4 :(得分:0)
String ip="Test ${template} in ${xyz}";
Pattern p = Pattern.compile("\\{.*?\\}");
Matcher m =p.matcher(ip);
while(m.find())
{
System.out.println(m.group());
}
答案 5 :(得分:0)
一个斜线是不够的。你需要两个斜杠。
试试这个正则表达式:
\\$\\{.+\\}
它检查带有$ {和}周围文本的字符串。这会过滤掉空白字符串(${}
)和任何未正确关闭的字符串。
如果您想检查前方和后方的文字,请尝试.+\\$\\{.+\\}.+