正则表达式索引0它是如何工作的

时间:2013-07-11 14:09:51

标签: java regex string

通过编译以下内容:

 System.out.println(Pattern.matches(".?(\\d)$","3"));

它返回true,因为在3之前没有任何内容,?检查一个或零。 但是3已经是输入的第一个字符,从0开始到1结束。如何在7之前识别出什么都没有。 例如以下内容。

的System.out.println(Pattern.matches( “你好”) “*”;

它也返回true,但只有最后一个字符与“nothing”匹配。 在字符串的开头不应该有“无”字符,只在它的结尾处?

3 个答案:

答案 0 :(得分:2)

  1. 这不是关于JVM的。这是关于Java正则表达式。
  2. 正则表达式“。*”表示“匹配0个或更多字符”。很容易满足这一点,因为空字符串有0个字符,因此满足了这一点。 Java正则表达式是选择延迟并匹配空字符串,还是贪婪并匹配整个字符串取决于Java正则表达式的实现。如果您阅读这篇优秀的文章(http://docs.oracle.com/javase/tutorial/essential/regex/quant.html,您会发现Java中的“。*”模式被认为是“不情愿”的量词,并且希望尽可能少地采用
  3. 根据该写入中的信息,您可以看到类似“。{0,}”的模式是同一表达式的贪婪版本。如果这对你来说真的是一个问题,也许你会想要使用它。

答案 1 :(得分:1)

您没有正确解释正则表达式。没有“没什么特征”这样的东西。相反,您的模式显示:任何字符串后跟字符串末尾的数字 OR 字符串末尾的数字。

当然,“3”非常符合第二种描述。

答案 2 :(得分:0)

matches方法尝试完全匹配输入。

因此无需使用^$ ..