我在大约3,000个字符长的文本块上运行多管道正则表达式。我有6个不同,并且匹配总是以相同的顺序相对于彼此并且复杂化它是我总是想要优先考虑最后一个第一次
Pattern1|Pattern2|Pattern3|Pattern4|Pattern5|Pattern6
现在我正在测试找到Pattern1的文本块。独立需要41步,管道需要30,000步。我知道这个特定问题可能需要更具体的信息,但是想知道是否有一些通用的步骤可以使管道和/或管道更有效。是否有"订单"这有帮助吗?很明显,这不是测试第一个模式然后退出,因为它仍然是41个步骤,所以想知道我是否需要遵守一些我不知道的基本和/或构造。
答案 0 :(得分:0)
关于优化交替组的要点是替代分支在同一位置不匹配。
考虑一个字符串,其中包含许多与上图中的字符串类似的子字符串:
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
请参阅regex demo。首先尝试Pattern1
,它匹配Pattern
但由于之后没有数字,因此将替换该替代方案并尝试下一个分支。 Pattern2
也达到了数字,但没有数字。等等。
如果你使用一个公共前缀开始你的正则表达式,然后使用一个组来表示不同的结尾 - 比如Pattern(?:1|2|3|4|5|6)
- 可以节省大量的冗余回溯。