【发布时间】:2014-03-11 11:58:59
【问题描述】:
我想匹配/提取字符串asd{test}asd中的单词test。
我的正则表达式:({test}.*) 将匹配 {test}。我如何能:
- 匹配刹车内的任何东西?
- 从匹配组中排除括号?
- 使匹配组可选?
【问题讨论】:
我想匹配/提取字符串asd{test}asd中的单词test。
我的正则表达式:({test}.*) 将匹配 {test}。我如何能:
- 匹配刹车内的任何东西?
- 从匹配组中排除括号?
- 使匹配组可选?
【问题讨论】:
您可以尝试使用look-around 机制,例如(?<=\\{)[^}]*(?=\\})
演示:
String data = "asd{test}asd";
Pattern p = Pattern.compile("(?<=\\{)[^{}]*(?=\\})");
Matcher m = p.matcher(data);
if(m.find())
System.out.println(m.group());
输出:test
解释:
[^{}]* - 将匹配零个或多个非 { 或 } 字符(?<=\\{) - 前面有{(我们需要在这里转义{,因为它是正则表达式元字符)(?=}) - 和 } 之后},因为它不是 {..} 量词的一部分)【讨论】:
使用({(test)}.*) 并获取group(1)。
【讨论】:
(?:{(test)}.*)?