【问题标题】:Regular Expression Java Pattern正则表达式 Java 模式
【发布时间】:2016-04-20 17:18:37
【问题描述】:

我应该匹配两个大于 0 的数字,并用空格分隔

^\d+?\s\d+?$

我试过了,但它显然不起作用 那么我还应该匹配一个以 # 开头并以 # 结尾的字符串,并且里面应该有固定数量的 char,可以是任何 char,由变量 w - 2 确定。

String regex = "#.{" + (w - 2) + "}$";

return Pattern.matches(regex, stringToMatch );

试过了,还是不行。

【问题讨论】:

  • 当你说“不起作用”时,什么不起作用?您的输入和预期输出是什么?
  • "#.{" + (w - 2) + "}$"; 应该是"#.{" + (w - 2) + "}#";...
  • 第一个甚至没有编译,它给了我无效的转义序列,第二个如果w = 4它不识别#gf#
  • 试试这个:\\d+\\s\\d+
  • 要匹配大于 0 的数字,您不能只使用 \d+,因为这将匹配 0。如果有前导零,则使用\d*[1-9],否则使用[1-9]+

标签: java regex string char pattern-matching


【解决方案1】:

匹配非零数字的最有效方法(我知道;),同时断言它是有效数字并允许前导零,是

\d*[1-9]\d*

这样可以确保所有测试的字符都是数字,并且其中至少有一个不是零。

所以你的第一个声明应该是这样的

String regex = "^\\d*[1-9]\\d*\\s\\d*[1-9]\\d*$";

(您可以通过环视来做类似的事情,但效果较差 - 特别是对于较长的数字。)


至于问题的第二部分,如 cmets 中所述,您忘记了结尾 #。如果允许前后有其他文字:

String regex = "#.{" + (w - 2) + "}#";

如果它应该是唯一的文本:

String regex = "^#.{" + (w - 2) + "}#$";

希望这会有所帮助。

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 2012-03-19
    • 2016-04-24
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多