これらの文字列を除いて、
何にでも一致する正規表現は何ですか: =>
、|
?
javaccに精通している場合は、ANYTHING
以下に示すようにトークンを定義しようとしています。
TOKEN :
{
<ARROW: "=>" >
|
<ANYTHING: (["\u0001" - "\uffdc"])+>
|
<PIPE: "|">
|
<UPPER_CHAR: (["A"-"Z"])>
}
ありがとう
次のようなものを試してください。
options {
STATIC = false ;
}
PARSER_BEGIN(Test)
public class Test {
public static void main(String[] args) throws Exception {
Test parser = new Test(new java.io.StringReader("foo=>bar=baz|done"));
parser.Parse();
}
}
PARSER_END(Test)
TOKEN :
{
< ARROW : "=>" >
| < PIPE : "|" >
| < ANYTHING : (~["=", "|"] | "=" ~[">"])+ >
}
void Parse() :
{}
{
(Any())* <EOF>
}
void Any() :
{Token t;}
{
( t=<ARROW> {System.out.println("ARROW = '" + t.image + "'");}
| t=<PIPE> {System.out.println("PIPE = '" + t.image + "'");}
| t=<ANYTHING> {System.out.println("ANYTHING = '" + t.image + "'");}
)
}
パーサークラスを生成します。
javacc Test.jj
main
次のメソッドを実行します。
javaテスト
入力に対して以下を出力します"foo=>bar=baz|done"
:
ANYTHING ='foo' 矢印='=>' ANYTHING ='bar = baz' PIPE ='|' ANYTHING='完了'
おそらく、字句状態を使用するのが最善です。これが機能する可能性のあるREソリューションです
("=")+ | ( ~["=","|"] | ("=")* ~["=","|",">"] )+ ("=")*
ちなみに、空の文字列が「何でも」にならないように質問を少し変更したので、このreは、空ではなく、「|」や「=>」を含まない文字列と一致する必要があります。