我最近收到了一些求职者的测试结果,其中有人声称他们提供的解决方案更有效(我不想说,因为我不想影响答案)。不用说,我很怀疑,但是我对RE编译器的内部工作了解得不够多,无法明智地进行评论。
问题是:给出正则表达式以识别从0到99(含0)之间的数字。
答案是:
[0-9]{1,2}
[0-9]?[0-9]
[0-9]|([0-9][0-9])
我对为什么其中任何一个速度更快(或以其他任何方式更好)感兴趣。提供证据而不是con测的加分点,但是如果您说得足够令人信服,我仍然会con测:-)
最佳答案
表达式[0-9]{1,2}
应该是我想象中最快的,尽管它取决于特定的引擎。
我的理由是:
这是在.NET(不使用RegexOptions.Compiled)中进行测试时每秒获得的迭代次数:
正则表达式100%有效输入50%有效输入100%无效输入
“^ [0-9] {1,2} $” 749086 800313 870748
“^ [0-9]?[0-9] $” 731951 725984 740152
“^(?:[0-9] |([0-9] [0-9]))$” 564654 687248 870378
使用RegexOptions.Compiled:
正则表达式100%有效输入50%有效输入100%无效输入
“^ [0-9] {1,2} $” 1486212 1592535 1831843
“^ [0-9]?[0-9] $” 1301557 1448812 1559193
“^(?:[0-9] |([0-9] [0-9]))$” 1131179 1303213 1394146
并作为一个图形:
注意:我修改了每个正则表达式以要求完全匹配,而不是执行搜索。
关于regex - 哪个是更有效的正则表达式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4272567/