繁体   English   中英

在Regex中优化或管道(|)

[英]Optimize Or Pipes (|) in Regex

我在大约3,000个字符长的文本块上运行多管道正则表达式。 我有6个不同,并且匹配总是以相同的顺序相对于彼此并且使其复杂化我总是想要优先考虑最后一个firsst

Pattern1|Pattern2|Pattern3|Pattern4|Pattern5|Pattern6

现在我正在测试一个找到Pattern1的文本块。 独立需要41步,管道需要30,000步。 我知道这个特定问题可能需要更具体的信息,但是想知道是否有一些通用的步骤可以使管道和/或管道更有效。 是否有“订单”有帮助? 显然,这不是测试第一个模式然后退出,因为它仍然是41个步骤,所以想知道我是否需要遵守一些我不知道的基本和/或构造。

关于优化交替组的要点是替代分支在同一位置不匹配

考虑一个字符串,其中包含许多与上面模式中的子字符串类似的子字符串:

Pattern  Pattern Pattern Pattern Pattern Pattern  Pattern Pattern Pattern Pattern Pattern  Pattern Pattern Pattern Pattern Pattern  Pattern Pattern Pattern Pattern Pattern  Pattern Pattern Pattern Pattern Pattern  Pattern Pattern Pattern Pattern Pattern  Pattern Pattern Pattern Pattern Pattern  Pattern Pattern Pattern Pattern Pattern2

请参阅正则表达式演示 Pattern1尝试Pattern1 ,它匹配Pattern但由于之后没有数字,所以替代被丢弃并尝试下一个分支。 Pattern2也上升到数字,但没有数字。 等等。

如果你使用一个公共前缀开始你的正则表达式,然后使用一个组来表示不同的结尾 - 比如Pattern(?:1|2|3|4|5|6) - 可以节省大量的冗余回溯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM