正则表达式,用于查找字符串中的变量

时间:2018-05-22 18:08:41

标签: java regex java-stream

有一个字符串可能有一个或多个"变量"在里面。变量由{[a-zA-Z0-9 _ + - ] *}定义。寻找一种逃避大括号的方法,但最后我期待这个:

Map<String, String> variableMap = getVarilableMap();
wrapperTDO.getValueList()
    .stream()
    .forEach(a -> /* if a.getValue() has one or more variables, replace from the map variableMap, and update setValue() */ );

问题是:

  1. 找到字符串中所有变量的正确正则表达式是什么,而不是找到误报,例如{abc is nothing,或{ab {ac}应该只是{ac}。
  2. 有没有办法将这些全部放入java中的一个lamda以最小化if语句?
  3. 这是一个两步过程,过滤到那些带变量的过程,然后只替换那些?

3 个答案:

答案 0 :(得分:1)

只需使用\

将其展开
\{[a-zA-Z0-9_+-]*}

显然你也需要逃离\,所以你最终会得到

\\{[a-zA-Z0-9_+-]*}

以下是https://www.regextester.com/?fam=103576

的示例

答案 1 :(得分:1)

如果您不希望大括号成为匹配的一部分,请使用正则表达式

(?<=\\{)[\\w+-]+(?=\\})

如果你想要大括号作为匹配的一部分,请使用正则表达式

\\{[\\w+-]+\\}

答案 2 :(得分:0)

逃脱{使用{。

要创建捕获组,请用​​()包围它。

查看Pattern和Matcher类。 Matcher将帮助您找到所有组。