【问题标题】:Regular expression matching my condition符合我条件的正则表达式
【发布时间】:2015-09-23 10:10:21
【问题描述】:

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

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

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

  1. $var1 $var2
  2. $var1

    $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”具有我上面提到的模式。 Values 是一个包含令牌的数组列表。

【问题讨论】:

  • @NielsKeurentjes- 我该怎么做?
  • @NielsKeurentjes 如果您阅读了这个问题,您会发现实际上第二个问题适用于 OP。
  • 如果你只想匹配所有的$vars,你可以简单地使用\$\w+/g
  • 糟糕,我的立场已得到纠正。这个问题的措辞非常神秘,带有编号的案例和变量:P
  • @Sergio 我也厌倦了,它不起作用。也试过这个-(\s\$\w+\s)*

标签: regex


【解决方案1】:

这里的问题是案例 1 末尾缺少空格。您在字符串之前手动添加了一个空格,但之后没有添加它。

我的建议是用环视检查标记前后是否没有单词字符,str = " " + str; 将变得多余。

要匹配所有$xx.x%-like 标记,您可以使用the following regex

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

这是IDEONE demo

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

【讨论】:

  • @stribizhev- 非常感谢!它有效。我记得尝试在最后添加一个空格。奇怪的是它不起作用。唯一的问题是我最后检查了空格。再次感谢
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多