我在我的代码中添加了这个正则表达式
\s\$\w+\.*\w+%*\s
我认为它会在我的输入字符串中匹配并标记下面的场景:
$ var2
我观察到案例2它将我的输入拆分为2个匹配,var1,var2。但是在第1种情况下,$ var1被视为匹配,$ var2被忽略。如果它不属于我的RE那么 - “任何以空格开头的词跟随美元以空格结束”并将我的输入分成2个匹配?如果没有,请任何人解释纠正它的方法,并告诉我为什么上述RE失败。
以下是代码:
List<String> values = new ArrayList<String>();
str = " " + str;
String pattern = (StringConstants.PATTERN_DOLLER_VALUE);
Pattern patternComplie = Pattern.compile(pattern);
if (!StringUtils.isBlank(configTemplateString)) {
Matcher matcherConfigTemplateString = patternComplie
.matcher(configTemplateString);
while (matcherConfigTemplateString.find()) {
String placeHolder = matcherConfigTemplateString.group();
System.out.println("placeholder :" + placeHolder);
values.add(matcherConfigTemplateString.group().trim());
“PATTERN_DOLLER_VALUE”具有我上面提到的模式。价值观是一种支持令牌的arraylist。
答案 0 :(得分:1)
此处的问题是在案例1结尾处缺少空格。您在字符串之前手动添加空格,但之后不会添加空格。
我建议检查令牌之前和之后是否有单词字符,并且str = " " + str;
将变得多余。
要匹配所有$xx.x%
- 类似令牌,您可以使用the following regex:
(?<!\\w)\\$\\w+\\.*\\w+%*(?!\\w)
或者,尝试在字符串的末尾添加一个空格(str = " " + str + " ";
)。