V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jprovim
V2EX  ›  分享发现

用 Regex 來檢查 Prime

  •  
  •   jprovim · 2015-02-13 06:58:51 +08:00 · 2307 次点击
    这是一个创建于 3556 天前的主题,其中的信息可能已经有所发展或是发生改变。

    /^1?$|^(11+?)\1+$/

    來源 原理

    6 条回复    2015-02-13 09:45:19 +08:00
    xjx0524
        1
    xjx0524  
       2015-02-13 09:08:38 +08:00
    这个表达式匹配的是非质数个1的串
    ‘|’ 前面是匹配 ‘’ 和 ‘1’
    后面原理是 括号内分组为[2,∞)个1,‘\1+’表示匹配[1,∞)个前面的分组,来达到倍数的目的
    FrankFang128
        2
    FrankFang128  
       2015-02-13 09:18:43 +08:00 via Android
    把数字N变成N个棍子,再看能不能完全分组
    FrankFang128
        3
    FrankFang128  
       2015-02-13 09:19:25 +08:00 via Android
    Perl 真是。。。
    reorx
        4
    reorx  
       2015-02-13 09:37:17 +08:00
    之前遇到一个题是匹配非质数个字母 x:

    http://regex.alf.nu/6

    Match:

    xx
    xxx
    xxxxx
    xxxxxxx
    xxxxxxxxxxx

    Not (质数):

    xxxx
    xxxxxx
    xxxxxxxx
    xxxxxxxxx
    xxxxxxxxxx

    最后想半天弄出一个 ^(?!(xx+)\1+$) ,不知道是不是最优解。

    另外 lz 这个正则里有个 +? ,有些看不懂,+ 是匹配一个或多个,? 是匹配零或一个,能混用吗?
    reorx
        5
    reorx  
       2015-02-13 09:38:49 +08:00
    车上打字迷糊了……上题是匹配质数个字母 x,Match 那里是质数……
    oott123
        6
    oott123  
       2015-02-13 09:45:19 +08:00 via Android
    @reorx 我猜 +? 是懒惰匹配…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   933 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 108ms · UTC 21:48 · PVG 05:48 · LAX 13:48 · JFK 16:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.