【问题标题】: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 ~ "\""
}