0

Java を使用して文字列 (AND、OR、NOT) 内の論理コネクタを検出しようとしています。私がやりたいことは次のとおりです。

  • 文字列 (((blue) AND (yellow) OR (pink) など) を指定して、各単語を区切り、リストに入れます。結果は {"blue","yellow","pink"} のようになります。

単語を一致させるには、\b(AND|OR|NOT)\b のような正規表現を使用する必要があることを知っています。しかし、コネクタの前後に各単語を返す方法がわかりません。

その他の質問: 正規表現を使用するのは便利ですか、それとも contains() を使用する必要がありますか?

4

4 に答える 4

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]
于 2012-08-17T14:31:23.923 に答える
0
string s="((blue) AND (yellow) OR (pink))";
s.split("\bAND\b|\bNOT\b|\bOR\b"); 
于 2012-08-17T14:31:13.900 に答える
0

を使用してみてくださいstring.split("AND|OR|NOT");

編集: おっと、忘れてました \b:

string.split("\b(AND|OR|NOT)\b");

于 2012-08-17T14:31:22.910 に答える
0

この種の文字列の解析は、正規表現のタスクではありません。正規表現は、定義済みの有限オートマトンを表します。

このタスクには、ある種のプッシュダウン オートマトンを使用する必要があります。

http://en.wikipedia.org/wiki/Pushdown_automaton

これを行う最も簡単な方法は、「論理文字列構造」を識別する再帰を使用することです

(...) AND (...)または(...) OR (...)、、NOT (...)など...

かっこを取り除き、この種の構造に一致しない文字列が見つかるまで繰り返します。

この文字列は、探しているものです。

于 2012-08-17T14:37:21.770 に答える