【问题标题】:Java Regular Expression Match on +/-/*/%+/-/*/% 上的 Java 正则表达式匹配
【发布时间】:2013-01-29 01:50:29
【问题描述】:

所以我有一个要解析的字符串,但我的正则表达式无法正常工作。我使用https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp 作为我的正则表达式指南。

我希望我的正则表达式匹配以下任何符号。

+ - * % / 

我的代码如下。输入字符串:D[1]+D[0]。应该打印 true...但是打印 false。

String tmp = "D[1]+D[0]";
if(tmp.matches("[\\+\\-\\*\\/\\%]"))
    System.out.println("true");
else
    System.out.println("false");

有什么想法吗?

【问题讨论】:

  • 尝试只使用 1 个反斜杠来转义字符。
  • @Serdalis Java 编译器要求 \ 被转义。单个反斜杠仅适用于以下序列 `\b \t \n \f \r \" \' \`
  • 首先要意识到Java 不是 Javascript! 所以 Javascript 的网络参考不一定对 Java 有那么大的用处。 docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html 应该是您作为参考的第一个呼叫点。
  • 请使用Pattern.quote(...)
  • @Adam - 至少使用Pattern.quote 你会让正则表达式从你的脸上消失。这只会让您使用更简洁的 Java 转义。

标签: java regex


【解决方案1】:

这是因为matches 想要匹配整个字符串,而不仅仅是它的任何部分。

您不需要在方括号内转义字符。

String str = "D[1]+D[0]";
Pattern p = Pattern.compile("[+-/*]");
Matcher m = p.matcher(str);
if (m.find()) {
    System.out.println("Found: " + m.group());
}

【讨论】:

  • 谢谢。这就是我一直在寻找的。我不知道Matcher。这就是我要找的!我也喜欢你如何将参数传递给group。当您的模式中有更复杂的str 时,.find() 似乎也很适合使用。
  • @Adam 反复调用find 可以让您找到下一个正则表达式。您需要使用括号来捕获多个组。有关这方面的更多信息,请参阅 regexp 文档,该库非常强大。
【解决方案2】:

matches() 必须匹配整个输入,但您只需在每一端添加.*

if (tmp.matches(".*[-+*/%].*"))

注意:[] 之间的字符不需要转义如果连字符是第一个或最后一个。

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2015-06-03
    • 2011-02-17
    相关资源
    最近更新 更多