V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linuxsteam
V2EX  ›  正则表达式

靓号正则表达式匹配 疑问

  •  
  •   linuxsteam · 2018-08-20 09:35:33 +08:00 · 4468 次点击
    这是一个创建于 2306 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在在写类似靓号规则的正则。

    尾数 11、22、33、44、55、77 带 4 遇到这类最低级的号码

    我发现我有些问题了。我先做尾数 11、22、33、44、55、77 需求。

    /\d*?(1|2|3|4|5|7)(6|8|9|0){1}(11|22|33|44|55|77)\b/

    但是还能搜索到中间是三连AAA,尾数是 11、22、33、44、55、77 的号码(带不带 4 这个先另说)

    请问有什么办法吗?

    第 1 条附言  ·  2018-08-21 11:53:19 +08:00
    其实我总结了一下。
    正则是可以做这个的,但是用于处理 74 种分类方法。还是挺耗费时间和我的能力是否能完成都是不肯定的。
    第 2 条附言  ·  2018-08-21 12:13:38 +08:00
    我现在考虑两种思路:
    批量生成:最多 200W 条,对于计算机不是问题。
    正则匹配:如题目。

    经过大家的回复和指点,其实我发现我纠结的问题,又清晰了,就是上述方法,写出的东西是否可以"复用"?

    例如 末尾 6 连是最好写的。但是最低级号码类别,最简单思路。就是排除其他高级号码的规则。我这种思路也就是复用其他高级号码的规则。直接无脑排除就好。

    如果还要新写一个正则或者新写一个生成规则的话。我感觉工期更不上,而且也会被领导认为无能。
    14 条回复    2018-08-21 11:49:59 +08:00
    linuxsteam
        1
    linuxsteam  
    OP
       2018-08-20 09:41:50 +08:00
    我先说一下我的思路,
    先把好匹配的高级靓号筛选出来、
    然后使用(?!4 连靓号|5 连靓号|6 连靓号) 这样的方法排除高级靓号。

    不知道这种思路是否可行?

    小弟想求长辈指导思路。我感觉我先写便宜号码的思路貌似是不对的。
    sagaxu
        2
    sagaxu  
       2018-08-20 09:54:57 +08:00 via Android
    根本不该用正则做
    linuxsteam
        3
    linuxsteam  
    OP
       2018-08-20 09:58:19 +08:00
    @sagaxu 那应该用什么呀,我现在没啥思路。我现在已经局限于正则了
    SorcererXW
        4
    SorcererXW  
       2018-08-20 11:41:16 +08:00 via Android
    @linuxsteam 不用 regexp 的话,可以从头到尾遍历一遍呀,检测特征就标记一下,最后做个判断,甚至可以给号码打分
    otakustay
        5
    otakustay  
       2018-08-20 12:12:55 +08:00
    @linuxsteam 自己写个函数做啊,一个函数里用不同正则一一测试也成的啊
    jiajia94
        6
    jiajia94  
       2018-08-20 12:47:32 +08:00
    一个正则匹配尾数 11、22、33、44、55、77,另一个正则匹配没有 3 连的号码,两个都命中才算~
    manhere
        7
    manhere  
       2018-08-20 12:50:33 +08:00
    不用正则,先把可能的靓号组合生成一个列表,简单比对包含关系就行了
    jiajia94
        8
    jiajia94  
       2018-08-20 13:16:45 +08:00   ❤️ 1
    ^(?:(?!(\d)\1\1).)*?(\d)(?!\2)(1|2|3|4|5|7)\3$ 这个正则也行~
    panpanpan
        9
    panpanpan  
       2018-08-20 13:43:38 +08:00
    生成一百万号码出来,然后给每个靓号都做标记,需要的时候直接用 tag 取。
    ChangeTheWorld
        10
    ChangeTheWorld  
       2018-08-20 14:54:04 +08:00   ❤️ 1
    某扫号软件附件带的正则,楼主看看够不够用,发出来挺费金币的
    ```
    "*AAA*" "\d([0-9])(?!\1)([0-9])\2{2}\d" "如 67772"
    "*AAAA*" "\d([0-9])(?!\1)([0-9])\2{3}\d" "如 355553"
    "A2B2B2A2" "\d{3}(\d{2})(?!\1)(\d{2})\2\1" "如 33555533"
    "A3B3" "\d{5}(\d{3})\1" "结尾如 555777"
    "*AAAAA*" "\d([0-9])(?!\1)([0-9])\2{4}\d" "如 4666662"
    "7 拖 1" "\d{2}([0-9])(?!\1)([0-9])\2{6}(?!\2)([0-9])" use="no" bz="如 33333335"
    "**ab **ab" "\d{5}(\d{2})(?!\1)(\d{2})\1" "结尾如 2356 8756"
    "7 拖二" "\d{1}([0-9])(?!\1)([0-9])\2{6}(?!\2)([0-9])\3" "如 44444442"
    "AA" "\d{8}([0-9])(?!\1)([0-9])\2{1}" "结尾双连"
    "AAA" "\d{7}([0-9])(?!\1)([0-9])\2{2}" "结尾三连"
    "AAAA" "\d{6}([0-9])(?!\1)([0-9])\2{3}" "4 连炸弹"
    "8 拖一" "\d{1}([0-9])(?!\1)([0-9])\2{7}(?!\2)([0-9])" "如 666666669"
    "AAAAA" "\d{6}([0-9])\1{4}" "5 连炸弹"
    "AAAAAA" "\d{5}([0-9])\1{5}" "6 连"
    "AAAB" "\d{6}([0-9])(?!\1)([0-9])\2{2}(?!\2)([0-9])" "结尾如 7778"
    "AABB" "\d{6}([0-9])(?!\1)([0-9])\2(?!\2)([0-9])\3" "结尾如 7788"
    "AABBCC" "\d{4}([0-9])(?!\1)([0-9])\2(?!\2)([0-9])\3(?!\3)([0-9])\4" "结尾如 335577"
    "AABBCCDD" "\d{3}([0-9])\1([0-9])\2([0-9])\3([0-9])\4" "如 22443311"
    "AABBCCDDEE" "\d{3}([0-9])\1([0-9])\2([0-9])\3([0-9])\4" "如 2244668811"
    "ab** ab**" "\d{3}(\d{2})(?!\1)(\d{2})\1(\d{2})" "如 2365 2374"
    "ABAB" "\d{7}([0-9])(?!\1)([0-9])\1\2" "结尾如 2323"
    "ABBA" "\d{7}([0-9])(?!\1)([0-9])\2\1" "结尾如 7887"
    "ABBABB" "\d{5}([0-9])(?!\1)([0-9])\2\1\2\2" "结尾如 233233"
    "ABC" "\d{7}([0-9]012|[^0]123|[^1]234|[^2]345|[^3]456|[^4]567|[^5]678|[^6]789)" "结尾三连"
    "ABCABC" "\d{5}(\d{3})\1" "结尾如 345345"
    "ABCD" "\d{6}([0-9]0123|[^0]1234|[^1]2345|[^2]3456|[^3]4567|[^4]5678|[^5]6789)" "4 连升"
    "ABCDABCD" "\d{3}(\d{4})\1" "如 25672567"
    "ABCDE" "\d{6}(01234|12345|23456|34567|45678|56789)" "5 连升"
    "DCBA" "\d{6}([0-9]9876|[^9]8765|[^8]7654|[^7]6543|[^6]5432|[^5]5678|[^4]3210)" "4 连降"
    "EDCBA" "\d{6}(43210|54321|65432|76543|87654|98765)" "5 连降序"
    "不带 4 和 7" "(0|1|2|3|5|6|8|9){11}" "不带 4 和 7"
    "不带 4 或 7" "(0|1|2|3|5|6|8|9){11}" "手机号码不带 4 或 7"
    "号段不带四,后四位带四" "1\d{2}[012356789]{4}(4\d{3}|\d4\d\d|\d\d4\d|\d{3}4)" "号段不带四,后四位带四"
    "号段带四,后四位不带四" "1\d{2}(4\d{3}|\d4\d\d|\d\d4\d|\d{3}4)[012356789]{4}" "号段带四,后四位不带四"
    "六拖二" "\d{2}([0-9])(?!\1)([0-9])\2{5}(?!\2)([0-9])\3" "如 33333322"
    "六拖一" "\d{3}([0-9])(?!\1)([0-9])\2{5}(?!\2)([0-9])" "如 5555554"
    "年份类" "\d{7}((19[5-9][0-9])|(20[0-1][0-9]))" "筛选年份特征的号码"
    "生日类" "\d{7}(?:0[13578]|1[02])(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)(?:0[1-9]|[12]\d|30)|02(?:0[1-9]|1\d|2[0-8])" "筛选生日特征的号码"
    "四拖二" "\d{4}([0-9])(?!\1)([0-9])\2{3}(?!\2)([0-9])\3" "结尾如 777744"
    "四拖一" "\d{5}([0-9])(?!\1)([0-9])\2{3}(?!\2)([0-9])" "结尾如 77774"
    "五拖二" "\d{3}([0-9])(?!\1)([0-9])\2{4}(?!\2)([0-9])\3" "如 4444422"
    "五拖一" "\d{4}([0-9])(?!\1)([0-9])\2{4}(?!\2)([0-9])" "结尾如 777774"
    "以 88 结尾" "\d{9}(88)" "以 88 结尾"
    "最后一位带四" "\d{10}(4)" "最后一位带四"
    ```
    LukeChien
        11
    LukeChien  
       2018-08-20 20:07:56 +08:00 via Android
    我做过存数据库,MySQL 也支持正则,每个数字一个字段,可以混用,n2=n1+1 and n3=n2+1 and n4=n3+1
    linuxsteam
        12
    linuxsteam  
    OP
       2018-08-21 11:45:29 +08:00
    @ChangeTheWorld 兄弟 你找的跟我的一样 是易语言开源的正则,我就在用他的修改呢 谢谢。
    linuxsteam
        13
    linuxsteam  
    OP
       2018-08-21 11:47:25 +08:00
    @panpanpan 逆向思维,点赞。其实我可以自定义的号码就是 6 位 第七位只有两种号码 所以为 10*10*10*10*10*10*2=200W 但是生成 怎么能避免正则这种东西呢
    linuxsteam
        14
    linuxsteam  
    OP
       2018-08-21 11:49:59 +08:00
    @jiajia94 大佬 真是太谢谢了,这玩意不好写啊。您还抽空给我写这么长的。 看这个复杂程度。我感觉我还写不出这个层次的。何况这还没检测带不带 4。。。
    另外大佬您大概写这串 花了多久?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   939 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:16 · PVG 03:16 · LAX 11:16 · JFK 14:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.