什么是匹配任何东西的正则表达式,除了这些字符串:
=>
, |
?
如果您熟悉 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 测试.jj
并运行该main
方法:
java测试
将为输入打印以下内容"foo=>bar=baz|done"
:
任何东西='foo' 箭头 = '=>' 任何东西='bar=baz' 管道 = '|' 任何东西='完成'
你可能最好使用词法状态。这是一个可能有效的 RE 解决方案
("=")+ | ( ~["=","|"] | ("=")* ~["=","|",">"] )+ ("=")*
顺便说一句,我稍微改变了问题,以便空字符串不是“任何东西”,所以这个 re 应该匹配任何非空且不包含任何“|”或任何“=>”的字符串。