java - Java 正则表达式在匹配时返回 false
问题描述
我基本上是在尝试过滤以 .ack.gz 结尾的文件名
例如字符串文件名 = “somefile.ack.gz”
return filename.matches(".ack.gz$"); returns false
return filename.matches("\\.ack\\.gz$"); returns false
这些不应该匹配吗?不知道我在这里错过了什么......
解决方案
该String.matches
方法 ( javadoc ) 测试正则表达式是否匹配整个目标字符串。
但是在您的示例中,正则表达式".ack.gz$"
并不匹配"somefile.ack.gz"
. 因此匹配返回false
。
如果您真的想使用正则表达式来执行此操作,那么您的代码应该是:
return filename.matches(".*\\.ack\\.gz");
笔记:
- 匹配文件名的
.*
第一部分。 \\.
表示匹配文字.
字符。如果您没有转义,则.
匹配任何单个字符。需要双重转义,因为该模式被表示为 Java 字符串文字。- 前导
^
和尾随$
是不必要的。它们被的语义所暗示match
。
但是正如@kaya 指出的那样,最好在此处使用String.endsWith
(javadoc),因为您不需要此测试的正则表达式功能。
推荐阅读
- powerbi - Power BI 和 Power 自动化流程
- disk - 保留多少百分比的磁盘(不能使用)
- jquery - 使用 youtube api 将部分设置为片段和 contentDetails
- django - 如何在 Django-crispy-forms 中将“non_field_errors”放在表单的末尾
- html - 在 VS 代码中批量删除标签 * 标签内容
- angular - 命名空间“Electron.CrossProcessExports”没有导出成员“远程”
- docker - K6 - docker 容器中的并行测试
- sql - 我的查询在应该引发错误时继续
- php - Windows 上的 PHP 无法写入文件夹
- javascript - 如何编写代码以根据日期和时间 javascript 切换文本和图像?