正则表达式模式如下:
".*/.*/.*/.*/.*/.*/(.*)-\d{2}\.\d{2}\.\d{2}.\d{4}.*"
很难维持。
我在想,有没有这样的东西:
".*<userName>/.*<envName>/.*<serviceName>/.*<dataType>/.*<date>/.*<host>/(.*)-\d{2}\.\d{2}\.\d{2}.\d{4}.*<fileName>"
为了更容易地阅读/理解正则表达式?
更新日期:2018-12-07
感谢@liinux的帮助,它被称为free spacing,一个简单的java演示是:
public static void main(String[] args) {
String re = "(?x)"
+ "# (?x) is the free-spacing flag\n"
+ "#anything here between the first and last will be ignored\n"
+ "#in free-spacing mode, whitespace between regular expression tokens is ignored\n"
+ "(19|20\\d\\d) # year (group 1)\n"
+ "[-/\\.] # separator\n"
+ "(\\d{2}) # month (group 2)\n"
+ "[-/\\.] # separator\n"
+ "(\\d{2}) # day (group 3)";
Pattern pattern = Pattern.compile(re);
Stream.of("2018-12-07", "2018.12.07", "2018/12/07").forEach(aTest -> {
System.out.println("****************Testing: " + aTest);
final Matcher matcher = pattern.matcher(aTest);
if (matcher.find()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group - " + i + ": " + matcher.group(i));
}
}
});
}
2条答案
按热度按时间nlejzf6q1#
如果您的语言支持,您可以在regex中使用自由间距添加注解。在自由间距模式下,忽略空白(注意事项适用),您可以使用
#
签字。教程中的示例
ufj5ltwl2#
如果您使用的是perl,那么只需启用
/x
在正则表达式中标记并放置空格和注解:也就是说,所有这些
.*
应该是的[^/]*
如果这是你的意思(一系列非斜杠字符)。您还可以从具有合理名称的变量构建模式: