靓号正则表达式匹配 疑问

2018-08-20 09:35:33 +08:00
 linuxsteam

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

尾数 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 这个先另说)

请问有什么办法吗?

4448 次点击
所在节点    正则表达式
14 条回复
linuxsteam
2018-08-20 09:41:50 +08:00
我先说一下我的思路,
先把好匹配的高级靓号筛选出来、
然后使用(?!4 连靓号|5 连靓号|6 连靓号) 这样的方法排除高级靓号。

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

小弟想求长辈指导思路。我感觉我先写便宜号码的思路貌似是不对的。
sagaxu
2018-08-20 09:54:57 +08:00
根本不该用正则做
linuxsteam
2018-08-20 09:58:19 +08:00
@sagaxu 那应该用什么呀,我现在没啥思路。我现在已经局限于正则了
SorcererXW
2018-08-20 11:41:16 +08:00
@linuxsteam 不用 regexp 的话,可以从头到尾遍历一遍呀,检测特征就标记一下,最后做个判断,甚至可以给号码打分
otakustay
2018-08-20 12:12:55 +08:00
@linuxsteam 自己写个函数做啊,一个函数里用不同正则一一测试也成的啊
jiajia94
2018-08-20 12:47:32 +08:00
一个正则匹配尾数 11、22、33、44、55、77,另一个正则匹配没有 3 连的号码,两个都命中才算~
manhere
2018-08-20 12:50:33 +08:00
不用正则,先把可能的靓号组合生成一个列表,简单比对包含关系就行了
jiajia94
2018-08-20 13:16:45 +08:00
^(?:(?!(\d)\1\1).)*?(\d)(?!\2)(1|2|3|4|5|7)\3$ 这个正则也行~
panpanpan
2018-08-20 13:43:38 +08:00
生成一百万号码出来,然后给每个靓号都做标记,需要的时候直接用 tag 取。
ChangeTheWorld
2018-08-20 14:54:04 +08:00
某扫号软件附件带的正则,楼主看看够不够用,发出来挺费金币的
```
"*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
2018-08-20 20:07:56 +08:00
我做过存数据库,MySQL 也支持正则,每个数字一个字段,可以混用,n2=n1+1 and n3=n2+1 and n4=n3+1
linuxsteam
2018-08-21 11:45:29 +08:00
@ChangeTheWorld 兄弟 你找的跟我的一样 是易语言开源的正则,我就在用他的修改呢 谢谢。
linuxsteam
2018-08-21 11:47:25 +08:00
@panpanpan 逆向思维,点赞。其实我可以自定义的号码就是 6 位 第七位只有两种号码 所以为 10*10*10*10*10*10*2=200W 但是生成 怎么能避免正则这种东西呢
linuxsteam
2018-08-21 11:49:59 +08:00
@jiajia94 大佬 真是太谢谢了,这玩意不好写啊。您还抽空给我写这么长的。 看这个复杂程度。我感觉我还写不出这个层次的。何况这还没检测带不带 4。。。
另外大佬您大概写这串 花了多久?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/481308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX