找回密码
 加入
搜索
查看: 472|回复: 12

[AU3基础] 小小正则[已解决]

[复制链接]
发表于 2022-9-14 08:48:48 | 显示全部楼层 |阅读模式
本帖最后由 z761003 于 2022-9-14 18:02 编辑

Local $a='{"{"words":"100001,200002,300003,400004,1569821099401685276"}'
$b=StringRegExp($a,'\D(\d{6})\D',3)
_ArrayDisplay($b)
本以为用这个正则就能轻松取出 100001,200002,300003,400004  这四组数字,毕竟意思也解释得通,中间6个数字头尾至少各一个非数字,,,可结果看了出意料,出来的仅有100001和300003 ,这是哪出?我想简单了吗?应该怎么整呢
发表于 2022-9-14 10:36:02 | 显示全部楼层
(?<!\d)\d{6}(?!\d)

评分

参与人数 1金钱 +40 收起 理由
itzyx + 40 赞一个!

查看全部评分

发表于 2022-9-14 09:42:20 | 显示全部楼层
StringRegExp($a,'(\d{6}),',3)  
因为正则是从左到右来的,只有这两个 '100001, ,300003, 符合数字两边是非数字字符串
 楼主| 发表于 2022-9-14 09:52:23 | 显示全部楼层
itzyx 发表于 2022-9-14 09:42
StringRegExp($a,'(\d{6}),',3)  
因为正则是从左到右来的,只有这两个 '100001, ,300003, 符合数字两边 ...

主要我还想匹配像这种
Local $a='{"{"words":"100001\200002/300003|400004#1569821099401685276"}'
就是6位数字是确定的,前后有非数字,但非数字是什么不想固定,怎么办
发表于 2022-9-14 10:32:39 | 显示全部楼层
z761003 发表于 2022-9-14 09:52
主要我还想匹配像这种
Local $a='{"{"words":"100001\200002/300003|400004#1569821099401685276"}'
...

如果格式都是这样形式的话
StringRegExp($a,'(\d{6})[^\d^"]',3)   可以这样,暂时只想到这个,等A大一会看到,有没有好的方法。
发表于 2022-9-14 10:48:13 | 显示全部楼层
\b\d{6}\b
用边界判断

评分

参与人数 1金钱 +40 收起 理由
itzyx + 40 赞一个!

查看全部评分

发表于 2022-9-14 10:58:30 | 显示全部楼层
zghwelcome 发表于 2022-9-14 10:48
\b\d{6}\b
用边界判断

为啥\b可以当做边界,这个不是单词的开头结束嘛,还有大佬一开始的零宽断言方法怎么删了,感觉也行啊。
发表于 2022-9-14 11:00:35 | 显示全部楼层
itzyx 发表于 2022-9-14 10:58
为啥\b可以当做边界,这个不是单词的开头结束嘛,还有大佬一开始的零宽断言方法怎么删了,感觉也行啊。

没有删,不管用什么方法,能达到要求就行
发表于 2022-9-14 11:03:23 | 显示全部楼层
zghwelcome 发表于 2022-9-14 11:00
没有删,不管用什么方法,能达到要求就行

哦哦 看错了 置顶了,牛啊  正则还是要多学习,第一方法看得懂,第二个边界没弄明白
发表于 2022-9-14 11:44:08 | 显示全部楼层
itzyx 发表于 2022-9-14 11:03
哦哦 看错了 置顶了,牛啊  正则还是要多学习,第一方法看得懂,第二个边界没弄明白

\b 不一定是单纯的单词边界,而是 \w 的边界,即数字字母下划线
发表于 2022-9-14 11:52:10 | 显示全部楼层
\D(\d{6})\D 这种写法中的 \D 是占字符的,即匹配 100001 及 300003 后消耗掉了,不能做下一次匹配,另外两个没有 \D 匹配,因此匹配不到。
用断言的方式是不占字符的,匹配的字符还能继续用于下一次匹配。zghwelcome 给出的 (?<!\d)\d{6}(?!\d) 就是对的,同理 (?<=\D)\d{6}(?=\D) 也是ok的~

评分

参与人数 2威望 +1 金钱 +21 收起 理由
haijie1223 + 1 + 1
itzyx + 20 只剩20了,今天又学习个新知识,点赞

查看全部评分

发表于 2022-9-14 11:58:18 | 显示全部楼层
afan 发表于 2022-9-14 11:44
\b 不一定是单纯的单词边界,而是 \w 的边界,即数字字母下划线

谢谢A大,学习了,当时看30min学习正则 那篇文章,以为\b单纯的是单词边界呢
 楼主| 发表于 2022-9-14 18:02:22 | 显示全部楼层
谢谢大佬,小小正则看来也不是这么简单的,要认真学习下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-25 17:14 , Processed in 0.090666 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表