Java模式匹配器和正则表达式
我需要正则表达式的帮助,请。。。基本上是匹配以下字符串的模式Java模式匹配器和正则表达式,java,regex,Java,Regex,我需要正则表达式的帮助,请。。。基本上是匹配以下字符串的模式 G1:k6YxekrAP71LqRv[P:3] G1:k6YxekrAP71LqRv[S:2,3,4|P:3] G1:k6YxekrAP71LqRv[P:3|R:2,3,4,5] G1:k6YxekrAP71LqRv[S:2,3,4|P:3|R:2,3,4,5] G1:k6YxekrAP71LqRv和p:3是最主要的匹配对象 我已经做了下面的匹配第一个字符串,但失去了与其他字符串 G1:k6YxekrAP71LqRv(\[|
G1:k6YxekrAP71LqRv[P:3]
G1:k6YxekrAP71LqRv[S:2,3,4|P:3]
G1:k6YxekrAP71LqRv[P:3|R:2,3,4,5]
G1:k6YxekrAP71LqRv[S:2,3,4|P:3|R:2,3,4,5]
G1:k6YxekrAP71LqRv和p:3是最主要的匹配对象
我已经做了下面的匹配第一个字符串,但失去了与其他字符串
G1:k6YxekrAP71LqRv(\[|\|)P:3(\||\])
如果我没有弄错的话,字符串都以G1:k6YxekrAP71LqRv开头 在那之后,有[p:3]本身,或者有左S:2,3,4 |,右R:2,3,4,5,或者有左和右。值2,3,4和2,3,4,5可以是用逗号除以的重复数字 要匹配完整模式,您可以使用: 解释 对于?:\d,+\d,您也可以使用2,3,4和2,3,4,5 fi,您希望从字面上匹配它们 要在开始时将整个字符串与G1:k6YxekrAP71LqRv匹配,并且应该包含p:3,可以使用正向前瞻?=.*p:3: 解决方案:
G1:k6YxekrAP71LqRv\\[.*?谢谢你的解决方案伙伴。你的表达不起作用。请在这里@zoro74查看。我在第一次尝试时更新了我的答案,以弥补这个漏洞,希望对你有所帮助:- (G1:k6YxekrAP71LqRv) # Match literally in group 1 \[ # Match [ (?: # Non capturing group S: # Match literally (?:\d,)+\d\| # Match repeatedly a digit and comma one or more times \d\| # Followed by a digit and | )? # Close group and make it optional (P:3) # Capture P:3 in group 2 (?: # Non capturing group \|R: # match |R: (?:\d,)+ # Match repeatedly a digit and comma one or more times \d # Followed by a digit )? # Close group and make it optional \] # Match ]
String s1 = "G1:k6YxekrAP71LqRv[P:3]";
String s2 = "G1:k6YxekrAP71LqRv[S:2,3,4|P:3]";
String s3 = "G1:k6YxekrAP71LqRv[P:3|R:2,3,4,5]";
String s4 = "G1:k6YxekrAP71LqRv[S:2,3,4|P:3|R:2,3,4,5]";
String withCommaAfter = "G1:k6YxekrAP71LqRv[S:2,3,4|P:3,4]";
String notMatch1 ="G1:k6YxekrAP71LqRv[P:33]";
String notMatch2 = "G1:k6YxekrAP71LqRv[S:2,3,4|P:33]";
String[] sampleStrings = new String[] {s1, s2, s3, s4, withCommaAfter, notMatch1, notMatch2}; // to store source strings and to print results in a loop
Pattern p = Pattern.compile("(G1:k6YxekrAP71LqRv)\\[.*(?<=\\||\\[)(P:3)(?=\\]|\\,|\\|)[^\\]]*\\]");
for(String s : sampleStrings) {
System.out.println("Checked String: \"" + s + "\"");
Matcher m = p.matcher(s);
while(m.find()) { // if match is found print the following line to the console
System.out.println("\t whole String : " + m.group());
System.out.println("\t G1...qRv part : " + m.group(1));
System.out.println("\t P:3 part : " + m.group(2) + "\n");
}
}
Checked String: "G1:k6YxekrAP71LqRv[P:3]"
whole String : G1:k6YxekrAP71LqRv[P:3]
G1...qRv part : G1:k6YxekrAP71LqRv
P:3 part : P:3
Checked String: "G1:k6YxekrAP71LqRv[S:2,3,4|P:3]"
whole String : G1:k6YxekrAP71LqRv[S:2,3,4|P:3]
G1...qRv part : G1:k6YxekrAP71LqRv
P:3 part : P:3
Checked String: "G1:k6YxekrAP71LqRv[P:3|R:2,3,4,5]"
whole String : G1:k6YxekrAP71LqRv[P:3|R:2,3,4,5]
G1...qRv part : G1:k6YxekrAP71LqRv
P:3 part : P:3
Checked String: "G1:k6YxekrAP71LqRv[S:2,3,4|P:3|R:2,3,4,5]"
whole String : G1:k6YxekrAP71LqRv[S:2,3,4|P:3|R:2,3,4,5]
G1...qRv part : G1:k6YxekrAP71LqRv
P:3 part : P:3
Checked String: "G1:k6YxekrAP71LqRv[S:2,3,4|P:3,4]"
whole String : G1:k6YxekrAP71LqRv[S:2,3,4|P:3,4]
G1...qRv part : G1:k6YxekrAP71LqRv
P:3 part : P:3
Checked String: "G1:k6YxekrAP71LqRv[P:33]"
Checked String: "G1:k6YxekrAP71LqRv[S:2,3,4|P:33]"