Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java正则表达式在字符串中间查找匹配字符串_Java_Regex_String - Fatal编程技术网

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

使用Java正则表达式在字符串中间查找匹配字符串,java,regex,string,Java,Regex,String,我需要验证文件输入,以确保其具有正确的版本控制。例如,这是输入文件:W:\\folder\\test\u v2301\u 01\u 29\u 2014\u 1420.pfd 我已经在Java中构建了一个正则表达式来查找我正在寻找的用于验证文件的版本控制字符串 RegEx:v[0-9]{4}{u0-9]{2}{u0-9]{2}{u0-9]{4}{u0-9]{4}但是,它失败了,因为RegEx正在查看文件的开头 调用:if(!arcvalFileFormBean.getTxtFileReview()

我需要验证文件输入,以确保其具有正确的版本控制。例如,这是输入文件:
W:\\folder\\test\u v2301\u 01\u 29\u 2014\u 1420.pfd

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

RegEx:
v[0-9]{4}{u0-9]{2}{u0-9]{2}{u0-9]{4}{u0-9]{4}
但是,它失败了,因为RegEx正在查看文件的开头

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

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

尝试以下方法:

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

String#matches
尝试匹配完整的输入,因此在您的版本regex之前
*?
,之后的
*
将确保此模式在输入中的任何地方都匹配。

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

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()
操作,尽管它的行为类似于字符串中的Matcher函数,因为它仅在整个字符串与RegEx模式匹配时返回true

模式/匹配器构造可用于发现某个子字符串是否与模式匹配,如果匹配,则替换该字符串的某些部分。也就是说,我们使用这种方法是为了使用定制的Logback
CompositeConverter
来屏蔽日志语句中的某些密码,该Logback
包含如下所示的类似逻辑:

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@");
}

工作得很有魅力。非常感谢。如果可能的话,我会在9分钟内把答案标记为“是”。