【问题标题】:How to stop regex matching after 1 match without using non-greedy character如何在不使用非贪婪字符的情况下在 1 次匹配后停止正则表达式匹配
【发布时间】:2010-10-29 01:26:02
【问题描述】:

无论如何,是否有一个正则表达式模式在一次匹配后自动停止搜索。我想将正则表达式搜索添加到我正在尝试创建的 Web 服务中,但我不希望有人能够运行需要很长时间的正则表达式,只要一个匹配就足够了。这可能吗?

【问题讨论】:

  • 你最坏的情况是不是有人输入了一个没有匹配项的复杂正则表达式?似乎您最好使用其他一些机制来防止正则表达式搜索消耗运行时。或者,您应该在预优化之前确定正则表达式是否真的会成为一个重要的潜在瓶颈

标签: regex full-text-search search


【解决方案1】:

即使使用限制量词,您仍然可能会得到一个长时间运行的正则表达式。

实现像this thread 讨论的可中断功能是另一种选择。

【讨论】:

    【解决方案2】:

    真正糟糕的退化模式永远不会匹配。而且,如果您找到找到退化案例的好方法,那么您可能会收到lot of money。超时可能会更好。在 Perl 中,我会使用 alarm 和块 eval

    您可能还在 Perl 中寻找 (*COMMIT) 以防止回溯。

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      相关资源
      最近更新 更多