除了这些字符串之外,匹配任何的正则表达式是什么:
=>
,|
?
如果您熟悉javacc,我尝试定义我的ANYTHING
令牌,如下所示:
TOKEN :
{
<ARROW: "=>" >
|
<ANYTHING: (["\u0001" - "\uffdc"])+>
|
<PIPE: "|">
|
<UPPER_CHAR: (["A"-"Z"])>
}
由于
答案 0 :(得分:4)
尝试这样的事情:
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 Test
将为输入"foo=>bar=baz|done"
打印以下内容:
ANYTHING = 'foo' ARROW = '=>' ANYTHING = 'bar=baz' PIPE = '|' ANYTHING = 'done'
答案 1 :(得分:2)
你可能最好使用词汇状态。这是一个可能有效的RE解决方案
("=")+ | ( ~["=","|"] | ("=")* ~["=","|",">"] )+ ("=")*
顺便说一下,我稍微更改了一下这个问题,以便空字符串不是“任何东西”,所以这个字符串应匹配任何非空的字符串,不包含任何“|”s,也不包含任何“=&gt; “第