【问题标题】:Regular Expression not working in Java正则表达式在 Java 中不起作用
【发布时间】:2015-01-22 18:17:16
【问题描述】:

我有字符串"SELECTOR('(namespace=''ar.com.osde.reintegros'' and eventname=''generacionReintegro'')')"。

我需要返回"SELECTOR("和")"之间的字符串,结果应该是:'(namespace=''ar.com.osde.reintegros'' and eventname=''generacionReintegro'')'。

我的正则表达式代码是:

public static String extractSelector(String txt){
    Pattern pattern = Pattern.compile("^SELECTOR\\((.*)\\)$");
    Matcher m = pattern.matcher(txt);
    String s = null;
    while (m.find()) {
        s = m.group(1);
    }
    return s;
}

其中 txt = "SELECTOR('(namespace=''ar.com.osde.reintegros'' and eventname=''generacionReintegro'')')"

但这总是返回null。这是为什么呢?

【问题讨论】:

  • 这段代码看起来没问题,问题可能出在你代码的其他地方
  • 您的代码有效:ideone.com/0SnJKM
  • 可能是您的字符串末尾或开头有隐藏字符或空格吗?尝试使用txt.trim() 而不仅仅是txt。
  • 我真的不认为这是一个重复的问题。至少不是它被标记为重复的问题的重复。

标签: java regex string


【解决方案1】:

这个jdoodle 表明该部分代码有效(仅添加了txt 的声明并删除了return 语句)。你确定在那之前txt 没有做任何事情吗?

鉴于您的代码,唯一的解释是 txt 与模式不完全匹配...这是因为根本不执行 while 循环(因此 find 始终为假)。

SELECTOR 和左括号( 之间可能有空格,可能SELECTOR 可以小写。为了调试这个,你也许可以写

System.out.println("\""+txt+"\"");

在实际匹配之前,或使用 IDE 的调试器功能来执行此操作。引号用于使空格更明确。

【讨论】:

  • 这是评论,不是答案。
  • @BrandonBuck:更新了它,提供了有关如何调试的建议。由于它提供了全面诊断问题的方法,因此这不仅仅是评论......
  • 如果它没有提供解决问题的方法(调试不是答案,而是建议),它仍然不是答案。
  • @BrandonBuck:确实如此,这不起作用的唯一可能原因是没有执行 while 循环。这是唯一可能的解释,因为如果txt 无效,它会给出NullPointerException。 SO 的目标不是解决问题。就像分享知识问答一样。这是人们不倾向于接受的事情之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 2015-07-14
相关资源
最近更新 更多