首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Perl的Regexp::Grammars最好地进行平衡引用?

如何使用Perl的Regexp::Grammars最好地进行平衡引用?
EN

Stack Overflow用户
提问于 2010-06-16 00:34:20
回答 2查看 371关注 0票数 2

使用Damian Conway的Regexp::Grammars,我尝试匹配不同的平衡引号('foo'"foo",而不是'foo")机制--比如括号、引号、双引号和双美元。这是我目前使用的代码。

代码语言:javascript
复制
<token: pair>        \'<literal>\'|\"<literal>\"|\$\$<literal>\$\$
<token: literal>    [\S]+

这通常可以很好地工作,并允许我这样说:

代码语言:javascript
复制
<rule: quote>            QUOTE <.as>? <pair>

我的问题是,我如何改革输出,以排除pair标记的针符号?

代码语言:javascript
复制
{
  '' => 'QUOTE AS \',\'',
  'quote' => {
               '' => 'QUOTE AS \',\'',
               'pair' => {
                           'literal' => ',',
                           '' => '\',\''
                         }
             }
},

在这里,显然不希望在引用和literal值之间有pair。有没有更好的方法来匹配'foo'"foo"$$foo$$,有时还可以匹配( foo ),而不是每次都创建不必要的pair令牌?我可以将该令牌预处理出来或将其折叠到上面的令牌中吗?或者,编写一个更好的结构来完全消除对它的需求?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-16 06:07:23

根据Damian的说法,答案实际上在文档的部分

代码语言:javascript
复制
The correct answer is to tell your <pair> token
to pass the result of each <literal> subrule through as its own
result, using the MATCH=
alias (see: "Manual result distillation" in the module documentation)  like so:

   <token: pair>        \'<MATCH=literal>\' | \"<MATCH=literal>\" |
\$\$<MATCH=literal>\$\$

以下是文档所说的:

Regexp::语法还提供了对蒸馏过程的完全手动控制。如果您使用保留字匹配作为子规则调用的别名...注意,在第二种情况下,即使和被捕获到结果散列,它们也不会被返回,因为匹配别名覆盖了正常的“返回结果散列”语义,并且只返回与其相关联的子规则(即)produces.

票数 3
EN

Stack Overflow用户

发布于 2010-06-16 02:11:31

使用Damian的另一个很棒的模块,Text::Balanced

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3047155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档