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. "))"