Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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_Split - Fatal编程技术网

Java 需要使用正则表达式拆分表达式的帮助吗

Java 需要使用正则表达式拆分表达式的帮助吗,java,split,Java,Split,我有一个这样的表达 A AND (B OR (C OR D)) 我希望括号作为一个单独的字符串,而不是在输出数组中与C或D组合 [A, AND, (, B, OR, (, C, OR, D, ), )] 添加,以代替空格和每个之后(和每个之前),然后使用。拆分(“,”)可以解决我的问题 在split方法中简单地使用正确的正则表达式,有没有更好的方法来做到这一点呢?这个怎么样: String input = "A AND (B OR (C OR D))"; String r

我有一个这样的表达

A AND (B OR (C OR D))
我希望括号作为一个单独的字符串,而不是在输出数组中与C或D组合

[A, AND, (, B, OR, (, C, OR, D, ), )]
添加
以代替
空格
和每个
之后(
和每个
之前)
,然后使用
。拆分(“,”
)可以解决我的问题

在split方法中简单地使用正确的正则表达式,有没有更好的方法来做到这一点呢?

这个怎么样:

String input = "A AND (B OR (C OR D))";
String regex = "\\s+|(?<=\\()|(?=\\))";
String[] tokens = input.split(regex);
说明: 正则表达式由

  • 一个或多个空间
  • 任何后跟括号的内容
  • 前面有括号的任何内容

我使用了积极的lookaheads和积极的lookbehinds,它们非常有用,所以一定要查找它们(没有双关语)

我希望这会有所帮助:

"A AND (B OR (C OR D))".split(" +| (?=\\()|(?=\\))|(?<=\\()") #=> [A, AND, (, B, OR, (, C, OR, D, ), )]

“代码”> A和(B或(C或D)”。拆分(“+”(?=\()”(?=)\?(?)您可能想考虑一个实际的表达式解析器。('是B的分隔符,它不应该在输出数组中,对吗?因为当它用作分隔符时,空格就是这样的。首先删除C之后的空格,这样您就可以考虑使用'(B)。现在,('和'B'之间的(idk what to call)位置匹配
(?)?
"A AND (B OR (C OR D))".split(" +| (?=\\()|(?=\\))|(?<=\\()") #=> [A, AND, (, B, OR, (, C, OR, D, ), )]
 + # splits by whitespaces
 (?=\\() # splits by whitespace followed by opening brace: e.g. in " (" it would give you single "(" instead of " " and "(" (like in the next part without whitespace in the beginning)
(?=\\)) # splits by empty string followed by closing brace: e.g. "B)" => ["B", ")"]
(?<=\\)) # splits by empty string preceding by closing brace: e.g. "))"