为什么';这个正则表达式在Java中不能像预期的那样工作吗?

为什么';这个正则表达式在Java中不能像预期的那样工作吗?,java,regex,Java,Regex,简单的正则表达式问题(答案很可能是特定于Java的): 这返回false。据我所知,^的意思是它一直以来的意思,#没有特殊的含义,因此我将^翻译为字符串开头的“A”。哪个应该匹配。在Perl中也是如此: perl -e "print '#This is a comment'=~/^#/;" 打印“1”。所以我很确定答案是Java特有的。有人能告诉我吗 谢谢。检查整个输入字符串是否与正则表达式匹配 由于正则表达式只匹配第一个字符,因此它返回false 你会想用它来代替 诚然,要找到具体规范可能有

简单的正则表达式问题(答案很可能是特定于Java的):

这返回false。据我所知,
^
的意思是它一直以来的意思,
#
没有特殊的含义,因此我将
^
翻译为字符串开头的“A”。哪个应该匹配。在Perl中也是如此:

perl -e "print '#This is a comment'=~/^#/;"
打印“1”。所以我很确定答案是Java特有的。有人能告诉我吗

谢谢。

检查整个输入字符串是否与正则表达式匹配

由于正则表达式只匹配第一个字符,因此它返回
false

你会想用它来代替

诚然,要找到具体规范可能有点棘手,但它确实存在:

  • 定义为执行与模式匹配(regex,str)相同的操作
  • 依次定义为
    Pattern.compile(regex).matcher(input).matches()
    • 返回一个
      模式
    • 返回一个
      匹配器
  • 是这样记录的(我的重点): 尝试根据图案匹配整个区域


匹配方法将正则表达式与整个字符串匹配

因此,请尝试添加一个
*
,以匹配字符串的其余部分

"#This is a comment in a file".matches("^#.*")

返回
true
。您甚至可以从正则表达式中删除所有锚(起始和结束),而
match
方法将为我们添加锚。因此,在上述情况下,我们也可以使用
“#.*.
作为正则表达式。

这应该满足您的期望:

"#This is a comment in a file".matches("^#.*$")
现在,输入字符串与模式“第一个字符应为
#
,其余字符应为任意字符”匹配


约阿希姆的评论如下:

"#This is a comment in a file".matches("#.*")

在这种情况下,这两个锚(
^
$
)都是不必要的,因为它们是由
匹配()所暗示的。这是正确的答案,谢谢。这有文件记录吗?因为我无法从String.matches的文档中读到这一点:“告诉这个字符串是否匹配给定的正则表达式。”听起来不像您所描述的。我一直理解“matches”意味着“整个输入”,但我已经添加了完整的解释(以及如何找到它)除非您将
(?s)
前置到您的正则表达式中,否则只有在字符串不包含任何换行符的情况下,它才会起作用。。。
"#This is a comment in a file".matches("#.*")