[英]Split String with multiple String Delimiter
How can I split the Filterlist in single Filter Elements?如何将过滤器列表拆分为单个过滤器元素? split2String results in an: Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 10 OR (|AND (
split2String 导致:线程“主”java.util.regex.PatternSyntaxException 中的异常:索引 10 附近的未封闭组 OR (|AND (
public class TestIt {
public static void main(String[] args) {
// condition is Part of the Thunderbird Filter List
String condition1 = "OR (subject,contains,Xxxx Yyyy) OR (subject,contains,Uuuu Cccc) AND (from,contains,Wwwww Zzzzz) OR (subject,contains,Uuuu Cccc)";
String condition2 = "OR (subject,contains,Xxxx YyOR yy) OR (subject,contains,Uuuu CcAND cc) AND (from,contains,Wwwww Zzzzz) OR (subject,contains,Uuuu Cccc)";
split1String(condition1);
split1String(condition2);
split2String(condition1);
split2String(condition2);
/*
* Expected Result with condition2:
* (subject,contains,Xxxx YyOR yy)
* (subject,contains,Uuuu CcAND cc)
* (from,contains,Wwwww Zzzzz)
* (subject,contains,Uuuu Cccc)
*
*/
}
public static void split1String(String condition) {
// Syntax=OK Result wrong
String[] xsplitted = condition.split("OR |AND ");
for (int i = 0; i < xsplitted.length; i++) {
System.out.println(xsplitted[i]);
}
}
public static void split2String(String condition) {
// Syntax=NOT OK
String[] xsplitted = condition.split("OR (|AND (");
for (int i = 0; i < xsplitted.length; i++) {
System.out.println(xsplitted[i]);
}
}
you can use the following regex to extract information.您可以使用以下正则表达式来提取信息。 As all you need is contained within parenthesis.
因为您需要的所有内容都包含在括号中。
Pattern pattern = Pattern.compile("\\((.*?)\\)", Pattern.MULTILINE);
Matcher matcher = pattern.matcher(condition2);
while (matcher.find()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println(matcher.group(i));
}
}
"OR (|AND ("
this regex has an incorrect syntax. Round bracket character (
has a special meaning in regex. It marks the begging of capturing group . Since it is a special character, it must be escaped by adding \\
: "OR (|AND ("
这个正则表达式语法不正确。圆括号字符(
在正则表达式中有特殊含义。它标志着捕获组的乞求。由于是特殊字符,必须通过添加\\
来进行转义:
"OR (subject,contains,Xxxx Yyyy) OR (subject,contains,Uuuu Cccc) AND (from,contains,Wwwww Zzzzz) OR (subject,contains,Uuuu Cccc)".split("OR \\(|AND \\(")
this gives:这给出了:
String[5] { "", "subject,contains,Xxxx Yyyy) ", "subject,contains,Uuuu Cccc) ", "from,contains,Wwwww Zzzzz) ", "subject,contains,Uuuu Cccc)" }
So the correct regex looks like: "OR \\(|AND \\("
所以正确的正则表达式看起来像:
"OR \\(|AND \\("
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.