【发布时间】:2016-10-18 13:01:56
【问题描述】:
假设我有一个固定的字符串列表。
对于任何输入字符串,我想找出列表中的哪个字符串是输入字符串的子字符串,或者列表中没有这样的字符串。
我的做法是:对于列表中的每个字符串,将其作为一个模式,并使用正则表达式匹配来查看它是否与某处的输入字符串匹配。
使用正则表达式是不是一种矫枉过正的方法?
谢谢。
它是用 C++ 编写的。计划是使用 C++ 标准库或 Boost 库。
【问题讨论】:
-
有了 17k+,你肯定知道代码比在黑暗中戳要好得多 :)
-
@Webeng He 必须知道任何问题都需要一些代码。
-
没有充分的理由提出这样的问题,因为答案是肯定的:视情况而定。什么语言?这个问题目前太宽泛了。
-
正则表达式可以让您指定要检查的整个列表,例如
/(foo|bar|baz)/在一次调用中,但它仍然会归结为正在执行的循环,并且可能不会比执行一堆 strpos 类型的调用更有效(而且可能更低)。 -
令人惊讶的是,它被放在 hold 上,因为它太宽泛了。如果那些被搁置的看门人会稍微冷却他们的喷气式飞机,我会发布一个很好的答案。 IS 使用正则表达式的最快方式。将字符串列表放在像
str1|str2|str3|str4|str5这样的正则表达式交替中,在您获得的每个输入字符串上运行正则表达式。为什么这样更快。 1. 正则表达式变成trie。 2. 来源搜索一次。与您能想到的ANY 其他方式相比,该组合表示性能增加 30-200,000%...编译一次正则表达式就可以了。跨度>