【问题标题】:Extract double quoted string content with Parboiled使用 Parboiled 提取双引号字符串内容
【发布时间】:2014-05-06 21:16:13
【问题描述】:

我正在编写一个解析器,其中一个部分应该匹配并检索双引号字符串内容 它只产生引号,而不是整个字符串。对于未引用的,一切正常

下面是对应的规则:

def doubleQuoted: Rule1[StringWrapper] = rule { //same for singlequoted
  "\"" ~ zeroOrMore( noneOf("\"\\") | ("\\" ~ "\"") ) ~ "\"" ~> StringWrapper
}

问题是:

  • 输入->“指令”
  • 预期输出 -> StringWrapper("\"directive\"")
  • 实际输出-> StringWrapper("\"")

【问题讨论】:

    标签: scala parsing parser-generator parser-combinators parboiled


    【解决方案1】:

    请注意,您可以使用normal* (special normal*)* 模式来加快解析速度。在 Java 中:

    Rule Normal()
    {
        return NoneOf("\\\"");
    }
    
    Rule Special()
    {
        return String("\\\"");
    }
    
    Rule NSN()
    {
        return Sequence(
            ZeroOrMore(Normal()),
            ZeroOrMore(Special(), ZeroOrMore(Normal()))
        );
    }
    
    Rule DoubleQuotedString()
    {
        return Sequence('"', NSN(), '"');
    }
    

    【讨论】:

      【解决方案2】:

      其实我找到了解决办法!

      此代码运行良好。实际上,我的 IDE 突出显示了我之前示例中的这部分代码

      zeroOrMore( noneOf("\"\\") | ("\\" ~ "\"") )
      

      具有类型 Rule0。我强迫它到 Rule1 而且,现在它可以工作了。

      def doubleQouteBody: Rule1[StringWrapper] = rule {
        zeroOrMore( noneOf("\"\\") | ("\\" ~ "\"") ) ~> StringWrapper
      }
      
      def doubleQuoted: Rule1[StringWrapper] = rule { //same for singlequoted
        "\"" ~ doubleQouteBody ~ "\""
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 2014-09-26
        • 2013-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多