gpt4 book ai didi

java - 编写正则表达式模式以便于理解/维护?

转载 作者:行者123 更新时间:2023-12-01 19:45:03 27 4
gpt4 key购买 nike

正则表达式模式如下:

".*/.*/.*/.*/.*/.*/(.*)-\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));
}
}
});
}

最佳答案

如果您使用 Perl,则只需启用 /x 标志并在正则表达式中添加空格和注释即可:

qr{
.* # userName
/
.* # envName
/
.* # serviceName
/
.* # dataType
/
.* # date
/
.* # host
/
(.*)-\d{2}\.\d{2}\.\d{2}.\d{4}.* # fileName
}x

也就是说,所有这些 .* 可能应该是 [^/]* 如果这就是您的意思(一系列非斜杠字符)。

您还可以从具有合理名称的变量构建模式:

my $userName =
my $envName =
my $serviceName =
my $dataType =
my $date =
my $host = qr{[^/]*};

my $fileName = qr{(.*)-\d{2}\.\d{2}\.\d{2}.\d{4}.*};

...
qr{$userName/$envName/$serviceName/$dataType/$date/$host/$fileName}

关于java - 编写正则表达式模式以便于理解/维护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53662331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com