java - 使用 Java 正则表达式在字符串中间查找匹配的字符串

标签 java regex string

我需要验证文件输入以确保它具有正确的版本控制。例如,这是输入文件:W:\\folder\\test_v2301_01_29_2014_1420.pfd

我在 Java 中构建了一个正则表达式来查找我正在寻找的版本控制字符串来验证文件。

正则表达式: v[0-9]{4}_[0-9]{2}_[0-9]{2}_[0-9]{4 }_[0-9]{4} 但是,它失败了,因为正则表达式正在查找文件的开头。

调用: if (!arcvalFileFormBean.getTxtFileReview().matches("v[0-9]{4}_[0-9]{2}_[0-9 ]{2}_[0-9]{4}_[0-9]{4}"))

在不知道距离开始有多远的情况下搜索字符串的最佳方法是什么?

最佳答案

您也可以先编译模式,创建匹配器实例,然后在返回的匹配器上调用 find(),而不是向 RegEx 添加前导和尾随匹配所有参数。

Pattern pattern = Pattern.compile("v[0-9]{4}_[0-9]{2}_[0-9]{2}_[0-9]{4}_[0-9]{4}");
Matcher matcher = pattern.matcher(arcvalFileFormBean.getTxtFileReview());

if (!matcher.find()) {
    ...
}

Matcher 还提供了一个 matches() 操作,尽管它的行为类似于 String 中的 matcher 函数,因为它仅在整个字符串与 RegEx 模式匹配的情况下返回 true。

Pattern/Matcher 构造可用于发现某个子字符串是否与该模式匹配,如果匹配则替换该字符串的某些部分。 IE。我们使用这种方法来使用自定义的 Logback CompositeConverter 来掩盖日志语句中的某些密码,它包含如下所示的类似逻辑:

Pattern urlAuthPattern = Pattern.compile("//(.*?):.*?@");
Matcher matcher = urlAuthPattern.matcher("ftp://user1:userPW@localhost:21/path/to/somewhere");
if (matcher.find()) {
    // should return ftp://user1:XXX@localhost:21/path/to/somewhere
    return matcher.replaceAll("//$1:XXX@");
}

关于java - 使用 Java 正则表达式在字符串中间查找匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21442078/

相关文章:

java - 如何将数据显示为进度条和圆圈百分比进度轮?

Javascript - RegExp - 替换最后一次出现的非数字

c# - c# 中的字符串相等运算符 ==

c++ - 如何打开用户输入的文件名?

javascript - 如何在 Cypress 中使用 RegExp 验证电话号码?

java - Android的replaceAll和字符串比较与==

java - Java 与 Python 中相同功能的不同之处

java - 无法在 Linux 上安装 Java

java - <br[^>]*> 正则表达式是什么意思?

java - 通过正则表达式拆分字符串