簡體   English   中英

使用Java正則表達式查找多個字符串匹配

[英]Find multiple string matches using Java regex

我正在嘗試使用正則表達式為Si(P)Si(I)之間的字符串找到匹配項。

下面是我寫的。 為什么它不起作用?如何解決?

String Channel = "Si0/4(I) Si0/6( Si0/8K  Si0/5(P)";

if (Channel.length() > 0) {
    String pattern1 = "Si";
    String pattern2 = "(P)";
    String pattern3 = "(I)";

    String P1 = Pattern.quote(pattern1) + "(.*?)[" + Pattern.quote(pattern2) + "|" + Pattern.quote(pattern3) + "]";

    Pattern p = Pattern.compile(P1);
    Matcher m = p.matcher(Channel);

    while(m.find()){
        if (m.group(1)!= null)
        {
            System.out.println(m.group(1));
        }
        else if (m.group(2)!= null)
        {   
            System.out.println(m.group(2));
        }
    }

}

預期產量

0/4
0/5

實際產量

0/4
0/6
0/8K  Si0/5

在正則表達式中使用后向和前向。 而且,您還需要在字符類內部添加空間,以免出現0/8K字符串。

(?<=Si)[^\\( ]*(?=\\((?:P|I)\\))

DEMO

String str="Si0/4(I) Si0/6( Si0/8K Si0/5(P)";
String regex="(?<=Si)[^\\( ]*(?=\\([PI]\\))";
Pattern pattern = Pattern.compile(regex);
Matcher matcher =pattern.matcher(str);
while(matcher.find()){
    System.out.println(matcher.group(0));
}

輸出:

0/4
0/5

您需要對正則表達式進行分組。

Si(.*?)[(P)|(I)]

鑒於應該

Si(.*?)\(I\)|Si(.*?)\(P\)

參見演示。

http://regex101.com/r/oO8zI4/8

[]的意思是“這些字符中的任何一個”,因此它將評估塊中的每個字母,就好像它們用OR分開一樣。

如果您搜索的結果始終是:數字/數字您可以使用:

的Si(\\ d + \\ / \\ d +)(?:\\(P \\)| \\(I \\))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM