当前位置: 首页 > 面试题库 >

为什么此正则表达式不能在Java中按预期工作?

边明煦
2023-03-14
问题内容

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

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

这将返回false。据我所知,^是指它始终意味着的#含义,没有特殊含义,因此我将其翻译^#为“字符串开头的’#’”。哪个应该匹配。在Perl中也是如此:

perl -e "print '#This is a comment'=~/^#/;"

打印“ 1”。所以我很确定答案是特定于Java的。有人能启发我吗?

谢谢。


问题答案:

Matcher.matches()检查
整个输入字符串 是否与正则表达式匹配。

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

您将改为使用Matcher.find()

当然,要找到具体的规范可能会有些棘手,但是它存在:

  • String.matches()被定义为与做相同的事情Pattern.matches(regex, str)
  • Pattern.matches()依次定义为Pattern.compile(regex).matcher(input).matches()
    • Pattern.compile()返回Pattern
    • Pattern.matcher() 返回一个 Matcher
  • Matcher.matches() 记录如下(强调我的意思):

尝试根据图案匹配 整个 区域。



 类似资料:
  • 我试图捕捉两个最接近的短语之间的文本,包括这些短语,但消极的展望似乎在我的情况下不起作用。 因此,这是文本文件的一部分: 我需要捕捉每一对<代码> 我的正则表达式是:

  • 我已经为名称验证创建了一个正则表达式,其中只允许“_”、“-”、“'”、“.”。 以下是正则表达式: 问题是这是其允许的名称有< code>@,检查小提琴演示: 应为:不应允许包含< code>@的名称。 注意:当我在https://regex101.com/#javascript测试这个正则表达式时,它运行良好

  • 问题内容: 我已经努力了两天才能使它正常工作,但我做不到(对正则表达式:S太糟糕了)。 从本文中,我需要检索两个不同的东西:和。为此,我创建了此正则表达式: 在该示例中,它可以工作。但是,如果我尝试其他文本:,则只会得到一个包含2个分组的匹配:和,而不是获得2个不同的匹配:一个具有分组和,另一个具有分组和。 我希望你能帮助我。 提前致谢。 问题答案: 这是为什么组合可能是邪恶的经典示例。请改用否定

  • 问题内容: 我正在做一个小的javascript方法,该方法会接收到一个点列表,并且我必须阅读这些点才能在Google地图中创建多边形。 我在表格上收到这些要点: (lat,long),(lat,long),(lat,long) 因此,我完成了以下正则表达式: 我已经使用RegexPal和收到的确切数据进行了测试: 并且它可以正常工作,所以为什么当我在JavaScript中添加此代码后,结果中会收

  • 问题内容: 我的理解是Java的正则表达式实现是基于Perl的。但是,在下面的示例中,如果我使用相同的字符串执行相同的regex,则Java和Perl返回不同的结果。 这是Java示例: 返回值:不匹配 这是Perl的示例: 返回:匹配项 对我来说,Perl的结果很有意义。它寻找单个单词字符的匹配项。我不明白为什么Java不认为这是一个匹配。差异的原因是什么? 问题答案: Java 方法正在测试正

  • 我不知道为什么这个正则表达式不匹配。也许你能发现错误。 ficontents: 我想匹配>>>>>>客户端9462<<<<<捕获该号码,以及此后的所有内容,直到另一个客户端号码。所以我的第一个捕获是“9462”,第二个捕获是“Had a program exception;please check the error log”。 它使用JavaScript设置在regex101.com中工作得很好