我正在尝试使用 Java 检测字符串(AND、OR、NOT)中的逻辑连接器。我想做的是:
- 给定一个字符串(例如 ((blue) AND (yellow) OR (pink)),将每个单词分开并将它们放在一个列表中。结果应该类似于 {"blue","yellow","pink"}
我知道为了匹配单词,我需要使用像 \b(AND|OR|NOT)\b 这样的正则表达式。但我不知道如何在连接符之后或之前返回每个单词。
其他问题:使用正则表达式有用还是我必须使用 contains()?
这个怎么样?
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]
string s="((blue) AND (yellow) OR (pink))";
s.split("\bAND\b|\bNOT\b|\bOR\b");
您可以尝试使用string.split("AND|OR|NOT");
.
编辑:哎呀,忘了\ b:
string.split("\b(AND|OR|NOT)\b");
解析这种字符串不是正则表达式的任务,正则表达式表示一个有限的预定义自动机。
您需要为此任务使用某种下推自动机。
http://en.wikipedia.org/wiki/Pushdown_automaton
最简单的方法是使用识别“逻辑字符串结构”的递归
(...) AND (...)
或(...) OR (...)
, NOT (...)
, 等等...
并去掉括号,然后重复,直到你发现一个与这种结构不匹配的字符串。
这个字符串就是你要找的。