我正在尝试使用Java检测字符串(AND,OR,NOT)中的逻辑连接器。我想做的是:
我知道为了匹配单词,我需要使用像\ b(AND | OR | NOT)\ b这样的正则表达式。 但我不知道如何在连接器之后或之前返回每个单词。
其他问题:有用的是使用正则表达式,还是我必须使用contains()?
答案 0 :(得分:3)
这个怎么样?
String s = "((blue) AND (yellow) OR (pink))";
s = s.replaceAll("\\(|\\)", "");
String[] words = s.split("AND|OR|NOT");
System.out.println(Arrays.toString(words));
输出:
[blue , yellow , pink]
答案 1 :(得分:0)
string s="((blue) AND (yellow) OR (pink))";
s.split("\bAND\b|\bNOT\b|\bOR\b");
答案 2 :(得分:0)
您可以尝试使用string.split("AND|OR|NOT");
。
编辑:哎呀,忘了\ b:
string.split("\b(AND|OR|NOT)\b");
答案 3 :(得分:0)
解析这种字符串对于正则表达式来说不是任务,正则表达式表示有限的预定义自动机。
你需要使用某种下推自动机来完成这项任务。
http://en.wikipedia.org/wiki/Pushdown_automaton
最简单的方法是使用递归来标识“逻辑字符串结构”
(...) AND (...)
或(...) OR (...)
,NOT (...)
等......
并删除括号,然后重复,直到发现与此类结构不匹配的字符串。
这个字符串就是你要找的。 p>