正则表达式匹配我的条件

时间:2015-09-23 10:10:22

标签: regex

我在我的代码中添加了这个正则表达式

\s\$\w+\.*\w+%*\s

我认为它会在我的输入字符串中匹配并标记下面的场景:

  1. $ var1 $ var2
  2. $ VAR1

    $ var2

  3. 我观察到案例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。

1 个答案:

答案 0 :(得分:1)

此处的问题是在案例1结尾处缺少空格。您在字符串之前手动添加空格,但之后不会添加空格。

我建议检查令牌之前和之后是否有单词字符,并且str = " " + str;将变得多余。

要匹配所有$xx.x% - 类似令牌,您可以使用the following regex

(?<!\\w)\\$\\w+\\.*\\w+%*(?!\\w)

这是IDEONE demo

或者,尝试在字符串的末尾添加一个空格(str = " " + str + " ";)。