2

什么是匹配任何东西的正则表达式,除了这些字符串: =>, |?

如果您熟悉 javacc,我正在尝试定义我的ANYTHING令牌,如下所示:

TOKEN :
{
 <ARROW: "=>" >
|
 <ANYTHING: (["\u0001" - "\uffdc"])+>
|
 <PIPE: "|">
|
 <UPPER_CHAR: (["A"-"Z"])>
}

谢谢

4

2 回答 2

4

尝试这样的事情:

测试.jj

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'
管道 = '|'
任何东西='完成'
于 2012-10-18T18:30:36.907 回答
2

你可能最好使用词法状态。这是一个可能有效的 RE 解决方案

  ("=")+    |     ( ~["=","|"]  |  ("=")* ~["=","|",">"] )+  ("=")*

顺便说一句,我稍微改变了问题,以便空字符串不是“任何东西”,所以这个 re 应该匹配任何非空且不包含任何“|”或任何“=>”的字符串。

于 2012-10-24T22:03:12.517 回答