相关疑难解决方法(0)

\ d效率低于[0-9]

我昨天做了评论,其中有人曾用一个答案[0123456789]正则表达式,而不是[0-9]\d.我说使用范围或数字说明符比使用字符集更有效.

我决定今天测试一下,并且我惊讶地发现(至少在C#正则表达式引擎中)\d似乎效率低于其他两个似乎没有太大差别的.这是我的10000个随机字符串1000个随机字符的测试输出,其中5077实际上包含一个数字:

Regular expression \d           took 00:00:00.2141226 result: 5077/10000
Regular expression [0-9]        took 00:00:00.1357972 result: 5077/10000  63.42 % of first
Regular expression [0123456789] took 00:00:00.1388997 result: 5077/10000  64.87 % of first
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是有两个原因:

  1. 我原以为该范围的实施要比套装更有效.
  2. 我无法理解为什么\d会比这更糟糕[0-9].还有\d简单的简写[0-9]吗?

这是测试代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Text.RegularExpressions;

namespace SO_RegexPerformance
{
    class Program
    {
        static void Main(string[] args)
        {
            var rand = new …
Run Code Online (Sandbox Code Playgroud)

c# regex performance

1214
推荐指数
4
解决办法
8万
查看次数

正则表达式[Az]和[a-zA-Z]之间的区别

我正在使用正则表达式为一个文本框编写输入验证器,我只想要字母字符.我在想,如果[A-z][a-zA-Z]是相等的或是否存在差异明智的性能.

我继续阅读[a-zA-Z]我的搜索,没有提到[A-z].

我正在使用java的String.matches(regex).

java regex

50
推荐指数
5
解决办法
5万
查看次数

为什么这个正则表达式允许插入符号?

http://regexr.com/3ars8

^(?=.*[0-9])(?=.*[A-z])[0-9A-z-]{17}$
Run Code Online (Sandbox Code Playgroud)

应该匹配"17个字母数字字符,也允许使用连字符,必须包含至少一个字母和至少一个数字"

它会正确匹配:

ABCDF31U100027743
Run Code Online (Sandbox Code Playgroud)

并正确拒绝匹配:

AB$DF31U100027743
Run Code Online (Sandbox Code Playgroud)

(以及几乎任何其他非字母数字字符)

但显然会允许:

AB^DF31U100027743
Run Code Online (Sandbox Code Playgroud)

regex

50
推荐指数
3
解决办法
3010
查看次数

标签 统计

regex ×3

c# ×1

java ×1

performance ×1