[英]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.