假设我想在一个大号(300,000个字母)中找到“dogs”一词,并且字母之间的距离恰好是之间的40,000个字母。所以我做:

$mystring =~ m/d.{40000}o.{40000}g.{40000}s/;

这在其他(较慢的)语言中也能很好地工作,但是在Perl中,它使我“{,}中的数量词大于正则表达式中的32766”。

所以:
  • 我们可以以某种方式使用更大的数字作为量词吗?
  • 如果没有,是否还有另一种找到我想要的好方法?注意,“狗”只是一个例子。我想对任何单词和任何跳转大小(快速)执行此操作。
  • 最佳答案

    如果您确实需要快速执行此操作,那么我将根据Boyer-Moore string search的想法进行自定义搜索。正则表达式被解析为有限状态机。这样的FSM即便是巧妙,紧凑的表示形式,也不是执行您所描述的搜索的非常有效的方法。

    如果您真的想继续做下去,现在就可以连接两个表达式,例如.{30000}.{10000},实际上与.{40000}相同。

    关于regex - Perl: “Quantifier in {,} bigger than 32766 in regex”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10625544/

    10-11 10:21