C#. 匹配任何字符串的最快正则表达式

6

非常简单。什么是最快的正则表达式,可以对任何输入返回true?

编辑:为什么要踩?这似乎是一个非常合理的问题。我使用一个接受正则表达式过滤器的函数,我想知道什么能让它最快地匹配所有内容。"不使用正则表达式"不是一个答案。


5
你曾想过这个问题吗?这听起来和巧克力茶壶一样没用。 - Matt Ellen
12
不使用正则表达式吗? - Joel Mueller
2
这个问题是由什么现实场景引发的? - Oded
2
@Joel Mueller,确实有些有道理,但假设您调用的函数在第三方代码中。相当多的人建议使用空字符串,我可能会选择这个。 - chillitom
当你遇到这样一种情况时,你可能需要它:你想匹配一个在配置文件中指定的文件名,但在某些情况下,你可以匹配任何文件。因此,当你可以匹配任何文件时,最好输入匹配速度最快的模式。(虽然我相信差异只有微秒级别。) - Joshua Frank
显示剩余8条评论
4个回答

4
class FastestRegex
{
    public static readonly Regex RE = new Regex("", RegexOptions.Compiled);
}

1
只是为了一句话而已,但你最好使用.NET内部的Regex缓存,并坚持使用Regex的静态函数。 - LorenVS
@LorenVS:这取决于您要创建多少个正则表达式以及您为正则表达式缓存设置的大小。但是,您知道这个正则表达式将被重复使用,那么为什么不手动缓存它呢? - Alan Moore

1

我认为它必须是类似于

.*?

这段代码将检查与任何字符的匹配,但由于懒惰操作符,它将不匹配任何字符串。我想它甚至在检查第一个字符之前就会返回。这是假设空字符串不会对所有输入返回true。


1

我猜空字符串""或输入开头"^"对于任何字符串都会得到最快(正)匹配结果。

然而你应该自己尝试:运行几个快速测试,模式"^"在Oracle的1.6 JRE上通常比""更快,但在Mono 2.4上则相反。在这两种情况下,.*?速度要慢得多。

但是还是要在自己的系统上测试。


0

没有永远不运行正则表达式的最快正则表达式。因此,最快的正则表达式就是实际运行的那个。/[\S\s]?/或者,我猜这个更快一些/.?/s

附加组件 - 有趣的事情/^/在perl循环30百万次中略微更快。但是,预先编译所有的正则表达式会将它们全部减速5倍。想想为什么。也许因为它太简单了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接