Java 正则表达式中的选项模式分隔符
我想创建一个与给定字符串匹配的模式,并从该字符串创建几个组 输入字符串:Java 正则表达式中的选项模式分隔符,java,regex,Java,Regex,我想创建一个与给定字符串匹配的模式,并从该字符串创建几个组 输入字符串: 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
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;组2=视频;group3=video123
(请参阅)
如果您需要正则表达式解决方案,NHAHDH已经为您提供了一个使用可选非捕获组的示例正则表达式,但我还建议使用模式末尾带有*
的所有字符,或者我们将获得与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));
}
正则表达式解释:
-除([^/]+)
/
-匹配的可选捕获组(?:/([^/]+)(?:/([^/]+)?)?
-文字/
/
-除([^/]+)
/
-与上述相同内容匹配的可选捕获组(?:/([^/]+)?)?
-将除换行符以外的所有字符匹配到字符串末尾,这样我们就不会得到进一步的匹配。如果要获得更多匹配项,请将其删除。或者替换为一个*
在空格或字符串结尾之前先行匹配(?=\\s |$)
请参阅另一个演示类似的内容
([^/]+)(?:/([^/]+)(?:/([^/]+))?)?
谢谢35; NHAHDH。它起作用了。你能给我解释一下你的答案吗?这样我以后可以根据我的要求修改它。你的要求不清楚,所以我在评论中说了些废话。如何使用这个正则表达式(Matcher.find
)?您考虑过String.split
?