我有一个由多个“new Array(...)”子字符串组成的字符串。每个数组都以“)”结尾,除了最后一个数组以外,它都以“))”结尾。
Strong 示例如下所示:
String text="root(new Array(\"Field1\", \"Field2\"), new Array(new Array(\"myArray1F1 (St.)\", \"myArray1F2\"),new Array(\"myArray2F1\", \"myArray2F2\"),new Array(\"myArray3F1\", \"myArray3F2\")) 0, 0)";
我尝试了几种自己制作的或在互联网上找到的模式。但没有任何作用。我从这种模式开始,但仍然想知道为什么这不起作用。
Pattern.compile("(new Array\\(\".*(\\),|\\)\\)))");
或
Pattern.compile("(new Array\\(\"(?!\\),|\\)\\)).*)");
这几乎按原样返回整个字符串。
@Test
public void testMyArray() {
Pattern arrayPattern = Pattern.compile("(new Array\\(\".*(\\),|\\)\\)))");
String text="root(new Array(\"Field1\", \"Field2\"), new Array(new Array(\"myArray1F1 (St.)\", \"myArray1F2\"),new Array(\"myArray2F1\", \"myArray2F2\"),new Array(\"myArray3F1\", \"myArray3F2\")) 0, 0)";
Matcher matcher = arrayPattern.matcher(text);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
}
这些是我想要检测的组:
new Array("Field1", "Field2")
new Array("myArray1F1 (St.)", "myArray1F2")
new Array("myArray2F1", "myArray2F2")
new Array("myArray3F1", "myArray3F2")
最佳答案
以下内容对我有用。
/* Required imports
* import java.util.regex.Matcher;
* import java.util.regex.Pattern;
*/
Pattern pttrn = Pattern.compile("new Array\\(\".+?\"\\),?");
Matcher mtchr = pttrn.matcher(text);
while (mtchr.find()) {
System.out.println(mtchr.group());
}
该模式查找以 new Array(
开头,后跟一个单双引号字符,后跟一个或多个字符,再后跟另一个双引号字符,最后跟一个右括号,可能以单个逗号结尾。
请注意,+?
被称为不情愿的限定符,而?
则表示恰好是一或无。
输出为
new Array("Field1", "Field2"),
new Array("myArray1F1 (St.)", "myArray1F2"),
new Array("myArray2F1", "myArray2F2"),
new Array("myArray3F1", "myArray3F2")
关于java - 寻找 REGEX 来匹配组并选择结束字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61731350/