繁体   English   中英

正则表达式中的选项模式分隔符

[英]Option pattern delimiter in regular expression

我想创建一个匹配给定字符串的模式,并从该字符串创建几个组。

输入字符串:

Case 1: wp/video/video123/xyz/abc
Case 2: wp/video/video123
Case 3: wp/video
Case 4: wp

以及所需的输出:

Case1: group1=wp,group2=video,group3=video123
Case2: group1=wp,group2=video,group3=video123
Case3: group1=wp,group2=video
Case4: group1=wp

我创建的模式匹配前两种情况,但忽略了后两种情况:

(.*?)/+(.*?)/(.*?)[/.]

您可以使用纯String.Split然后访问组,在没有正则表达式的情况下执行您想要的操作:

String input ="wp/video/video123/xyz/abc";
String[] spts = input.split("/");
System.out.println("group1=" + spts[0] + ";group2=" + spts[1] + ";group3=" + spts[2]);

这将输出group1=wp;group2=video;group3=video123 (见演示)。

如果您需要正则表达式解决方案,nhahtdh 已经为您提供了一个使用可选非捕获组的示例正则表达式,但我也建议使用模式末尾带有.*所有字符,否则我们将进一步匹配xyz/abc :

String str = "wp/video/video123/xyz/abc";
String rx = "([^/]+)(?:/([^/]+)(?:/([^/]+)?)?)?.*";
Pattern ptrn = Pattern.compile(rx);
Matcher m = ptrn.matcher(str);
while (m.find()) {
    System.out.println("group1=" + m.group(1) + ",group2=" + m.group(2) + ",group3=" + m.group(3));
}

正则表达式解释:

  • ([^/]+) - 除/之外的第 1 组 1 个或多个字符
  • (?:/([^/]+)(?:/([^/]+)?)?)? - 匹配的可选捕获组
    • / - 文字/
    • ([^/]+) - 除/之外的第二组 1 个或多个字符
    • (?:/([^/]+)?)? - 与上述相同内容匹配的可选捕获组
  • .* - 将除换行符以外的所有字符匹配到字符串的末尾,这样我们就不会得到进一步的匹配。 如果您想获得更多匹配,请将其删除 或者替换为(?=\\\\s|$)前瞻以在空格或字符串结尾之前匹配。

在此处查看另一个演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM