regex - 需要一个 java.util.regex 来检索引号中的值
问题描述
我有这个字符串:
String str = "message version=1 filename=\"double \"\"quote\"\" file.txt\" size=32591";
我想用正则表达式获取文件名值。到目前为止我使用的是:
Matcher fileNameMatcher = Pattern.compile("\\s*filename=\"(.*?)\"\\s*").matcher(str);
while (fileNameMatcher.find()) {
int n = fileNameMatcher.groupCount();
for (int i = 0; i < n; i++)
this.fileName = fileNameMatcher.group(i + 1);
}
如果文件名中有引号,它将始终加倍(“”),所以我想要一个忽略双引号并从消息中检索带引号的文件名值的正则表达式
解决方案
您可以使用
Pattern.compile("filename=\"([^\"]*(?:\"{2}[^\"]*)*)\"")
请参阅正则表达式演示。
图案细节
filename="
- 文字字符串([^"]*(?:"{2}[^"]*)*)
- 第一组:[^"]*
- 0 个或更多字符"
(?:"{2}[^"]*)*
- 0 个或多个双"
字符序列,然后是 0 个或多个字符以外的字符"
"
- 一个"
字符。
推荐阅读
- java - 分组和添加以下模式列表的最佳算法
- angular - 关闭ngbModal后,Angular 6将传递的参数恢复为其原始值
- missing-data - R missForest mixError 没有意义?
- validation - 检查时间
- javascript - 将空值转换为 0
- multithreading - 如何对 bash 代理检查器进行多线程处理?
- sql-server - 如何确保执行所有 SQL 更新
- sql - 基于映射表替换 XML 列中的多个值
- laravel - Laravel 5 - 定义模型之间的两种关系
- android - 如何在Android中将两个双打乘以双打?