首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用特定的回收箱捕获数列的正则表达式

用特定的回收箱捕获数列的正则表达式
EN

Stack Overflow用户
提问于 2018-01-29 17:35:05
回答 1查看 199关注 0票数 1

我们使用下面的正则表达式来捕获现有的卡号,这些卡号落入特定的垃圾箱,并用于一些分析。

从5开始的卡片箱

代码语言:javascript
复制
^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$

从4开始的卡片箱

代码语言:javascript
复制
^4[0-9]{12}(?:[0-9]{3})?$

需要捕获一组新的卡片箱(见下文),但上面所示的正则表达式无法捕获它。输入是一个包含16位数字的完整卡号,并分析和检查前6个数字是否落入刚才指定的正则表达式之一。

不幸的是,我们中没有人真正擅长regex,所以我在如何修改regex逻辑以捕获下面的回收箱方面寻求了一些帮助。谢谢

代码语言:javascript
复制
437544
550156
539628
458209
458208
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-29 18:43:19

这是找到这些数字的片段,只有那些。

通过这一工具获得:

ScrnSht01.jpg

注意:这是一个三元树,转化为正则表达式trie,使它成为最快的树。

在这个星球上寻找这些东西。

而且,实际上,获取所有有效的16位数字的bin数字可能会更快,

将其转储到此实用程序中,并生成regex trie。

这是地球上最快的方法。没有其他方法更快。

该实用程序接受无限数量的字符串。

例子-

http://www.regexformat.com/Dnl/_Samples/_Ternary_Tool (Dictionary)/___txt/_ASCII_175,000_word_Mix_A-Z_Multi_Lined.txt

http://www.regexformat.com/Dnl/_Samples/_Ternary_Tool (Dictionary)/___txt/_100_000_Domain_Names.txt

(?:4(?:0(?:2016|632[79])|1(?:4758|7997)|20230|3754[48]|40413|5(?:7(?:377|852)|82(?:0[89]|1[012])|9227)|69679)|5(?:2(?:1570|8243|9909)|39(?:179|628)|50(?:043|156)))

您所要做的就是在正则表达式开始时将其放入断言中:

^(?= <this regex> ) <existing regex> $

实际上,您可以将两个正则表达式合并为一个,给每个正则表达式一个捕获。

组作为标志,说明它有资格使用哪个垃圾桶。

^(?= <this regex> ) (?: (<existing regex for 4>) | (<existing regex for 5>) )$

格式化

代码语言:javascript
复制
 (?:
      4
      (?:
           0
           (?: 2016 | 632 [79] )
        |  1
           (?: 4758 | 7997 )
        |  20230
        |  3754 [48] 
        |  40413
        |  5
           (?:
                7
                (?: 377 | 852 )
             |  82
                (?: 0 [89] | 1 [012] )
             |  9227
           )
        |  69679
      )
   |  5
      (?:
           2
           (?: 1570 | 8243 | 9909 )
        |  39
           (?: 179 | 628 )
        |  50
           (?: 043 | 156 )
      )
 )

http://www.regexformat.com/scrn7/s7_b1.jpg Sample

第一个基准测试的输入示例是27个条目。

第二个基准测试的输入示例是重复的27个条目,以获得1,000,000个条目。

代码语言:javascript
复制
437544
437548
458212
469679
457377
457852
469679
458212
420230
402016
406327
406329
528243
521570
529909
539179
550043
550156
539628
458209
458208
417997
459227
458210
440413
458211
414758

基准- 1

代码语言:javascript
复制
Options:  < none >
Completed iterations:   38  /  38     ( x 1000 )
Matches found per iteration:   27
Elapsed Time:    1.008 s,   1008.38 ms,   1008383 µs

每秒38,000次迭代*每迭代27次匹配=每秒1,017,857次匹配

基准- 2

代码语言:javascript
复制
Options:  < none >
Completed iterations:   1  /  1     ( x 1 )
Matches found per iteration:   1000000
Elapsed Time:    0.96 s,   959.45 ms,   959451 µs

每0.96秒1次迭代*每次迭代1,000,000次匹配=每秒1,026,000次匹配

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48506936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档