簡體   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