检测逻辑连接器的最佳方法

时间:2012-08-17 14:23:52

标签: java regex

我正在尝试使用Java检测字符串(AND,OR,NOT)中的逻辑连接器。我想做的是:

  • 给定一个字符串(例如((蓝色)AND(黄色)OR(粉色)),将每个单词分开并放入List中。结果应该是{“blue”,“yellow”,“pink” }

我知道为了匹配单词,我需要使用像\ b(AND | OR | NOT)\ b这样的正则表达式。 但我不知道如何在连接器之后或之前返回每个单词。

其他问题:有用的是使用正则表达式,还是我必须使用contains()?

4 个答案:

答案 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 (...)等......

并删除括号,然后重复,直到发现与此类结构不匹配的字符串。

这个字符串就是你要找的。