![](/img/trans.png)
[英]Java regex : find the last occurrence of a string using Matcher.matches()
[英]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)\\))
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
[]的意思是“這些字符中的任何一個”,因此它將評估塊中的每個字母,就好像它們用OR分開一樣。
如果您搜索的結果始終是:數字/數字您可以使用:
的Si(\\ d + \\ / \\ d +)(?:\\(P \\)| \\(I \\))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.