Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java模式匹配器和正则表达式_Java_Regex - Fatal编程技术网

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]"