【问题标题】:Have you used the Perl 5.10 backtracking control verbs in your regexes yet? [closed]你在你的正则表达式中使用过 Perl 5.10 回溯控制动词吗? [关闭]
【发布时间】:2010-09-20 04:56:24
【问题描述】:

您是否在您的正则表达式中使用了 Perl 5.10 回溯控制动词?他们帮助你完成了哪些问题?


正如背景:我做了一些摆弄,但我无法得到任何真正有用的结果。

作为比较,当我开始了解 (?> 分组所做的事情时,它开始更多地出现在我的正则表达式中。我喜欢将 Perl 正则表达式世界调整为一组特定假设的想法。随着 RE 语言的功能越来越多,回溯使得 RE 的性能与它们所基于的精益和平均 FSA 大相径庭。


如果有人可以告诉我 REs 的哪些其他实现具有回溯控制动词——而 PCRE 没有,我可以承认它属于一般专业领域了解正则表达式的人。这是一个 Perl 正则表达式问题,帮助人们使用 Ruby、Python、C#、Javascript 或任何 PCRE 客户端实现的人可能无法帮助或将其视为浪费空间他们通常阅读的标签。

【问题讨论】:

  • 我们是否需要为 [perl-regex] 创建标签?
  • 在正则表达式标签下有太多实现特定的帖子。有人说“只有 Java”或“在 C# 中,....”所以 in 让我很恼火,据我所知只有 Perl 有这些动词,所以它是 Perl 特有的。
  • 我不明白“问题的答案将几乎完全基于意见”甚至是一个可信的批评。呈现的应用程序要么使用正则表达式动词,要么不使用,要么工作要么不工作,其方式类似于向其他问题提供的“解决方案”。并且它是否解决了一个足够重要的问题,也取决于投票系统本身在决定“解决方案”是否适合问题时所包含的相同类型的主观性。
  • 续:事实:正则表达式动词可以解决哪些问题?参考:是的,我已经通过这种方式解决了它们(这将包括一个带有控制动词的正则表达式)特定专业知识:在发布这个问题后的 6 年内,somebody 会使用他们对正则表达式的了解动词的形式不仅仅是“一个有趣的解决方案”和一个“实用的解决方案”。

标签: regex perl


【解决方案1】:

老实说,我什至还没有使用 5.10。与一些新功能一样棒的是我只在个人脚本中使用它们。对于生产,我的目标是与 5.8 兼容。对于 CPAN,我的目标是 5.6。这使我无法玩大多数新玩具。

回溯控制功能很有趣,但我看不到解析器之外的许多应用程序。我无法想象将整个解析器填充到单个正则表达式中。 (即使他们现在确实支持递归!)我对 Perl6 语法更感兴趣。

【讨论】:

  • 我同意语法。但现在动词给了我们一点。
  • 确实如此,但它看起来更像是一个预告片,而不是任何立即有用的东西。还有一点“警告:这些模式是实验性的,可能会更改或删除......”在 perlre 中的警告。
  • 5.10.0 是我目前编程的最低版本。在此之前做一些合理的事情太难了。我需要它来获得更好的正则表达式支持和更好的 Unicode 支持。
【解决方案2】:

我已经多年没有进行任何 Perl 编程了,所以在你提到它之前我什至不知道这个特性。它看起来像是只有正则表达式专家才会使用的核心功能之一(当然,Perl 社区有很多这样的功能)。另一方面,Perl 6 语法看起来会很有趣。

目前,我对原子组和所有格量词感到满意。事实上,我几乎沉迷于它们。它已经到了我反射性地尝试以它们永远不会回溯的方式编写正则表达式的地步。有时我不得不提醒自己,小剂量的回溯是可以的,完全消除它是不值得的。

p.s.,据我所知,所有格量词仅受 Java、PCRE(PHP、Apache、Flex 3/ActionScript 3)和 RegexBuddy、EditPad Pro 和 PowerGrep 使用的 JGSoft 正则表达式引擎支持。

更新:Oniguruma 风格(用于 Ruby 1.9+ 和 TextMate)同时支持原子组和所有格量词。当然,除了回溯控制动词之外,Perl 5.10 还支持它们。

【讨论】:

    【解决方案3】:

    是的,我有,虽然不是太多。我用它们来控制回溯,通常是为了迫使它做出更多的排列。这是amusing solution,这是practical one

    【讨论】:

    • 终于,我学会了如何使用一些正则表达式动词。多亏了你,也多亏了 (perlre)[perldoc.perl.org/perlre.html) 中的扩展部分(但也许你也是),我实际上为第二个解决方案想出了这个替代 RE:qr{ x (*PRUNE) (a?b?c?) (?(?{$1})|(*FAIL)) }x
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多