找回密码
 加入
搜索
查看: 5028|回复: 17

[系统综合] 求一个正则表达[已解决]

 火.. [复制链接]
发表于 2016-5-5 12:19:39 | 显示全部楼层 |阅读模式
本帖最后由 1361739590 于 2016-5-5 15:43 编辑

有一个字串:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21
字串也可能是下面的,少一个 , :
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

每个逗号之间可以是任意字符(除 , 以外),也可以是空字符,求怎么匹配 10 和 11 的内容。
发表于 2016-5-5 12:41:52 | 显示全部楼层
用StringSplit应该比好好解决吧
发表于 2016-5-5 12:59:41 | 显示全部楼层
(?m)(?:.*?,){9}(.*?)\,(.*?)\,

评分

参与人数 2金钱 +50 收起 理由
1361739590 + 40 谢谢解答,又咨询了点问题。
heroxianf + 10 很有用。

查看全部评分

发表于 2016-5-5 13:10:12 | 显示全部楼层
#include <Array.au3>

Local $file = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21" ;你的字符串
local $string = StringRegExp($file, "10|11", 3)
_ArrayDisplay($string)
发表于 2016-5-5 13:39:56 | 显示全部楼层
分割更简单啊
Local $sSource = '1,2,3,4,5,6,7, ,9,10,11,12,13,14,15,16,17,18,19,20,21'
Local $aSRE = StringSplit($sSource, ',')
If $aSRE[0] > 11 Then MsgBox(0, '', $aSRE[10] & @LF & $aSRE[11])
 楼主| 发表于 2016-5-5 13:46:42 | 显示全部楼层
回复 3# haijie1223


    谢谢。
想问一下:
1.  (?m) 这个是 匹配整个字符串数据内的换行符么?这个匹配实例可以举一个看看么?
2.  是不是说 正则里面有一组 () 就会有一个匹配结果,(?:....)是不记录这个结果,你给的有3个(),除了第一问的不懂,是不是另外2个 () 如果有匹配的都会返回结果?
3.  \,   这个为什么要一个 \   ?
4.  (.*?)\,  这个为什么要 2 遍?
谢谢。
 楼主| 发表于 2016-5-5 13:50:19 | 显示全部楼层
回复 5# afan


    谢谢。
最后目的是想替换第10和11的内容,
如果分割可能会得到 空字符 ,这个就不知道怎么替换了。
或者用$aSRE[1]&','&$aSRE[2]...自己重新组合也行,没想用,
顺便想学习一下正则,所以提出了这个问题。
发表于 2016-5-5 14:16:29 | 显示全部楼层
回复 6# 1361739590


    afan版主回贴了竟然不问他,他是正则大牛!不对,是正则之神!不对,是正则神牛!不对。。。算啦~
1、还是看看帮助吧,(?m) 行内匹配模式,^和$匹配换行符内的数据。 刚才我写的那个可以不用这个行内匹配。
2、?:是匹配到了但是不捕获,不分配分组,返回结果中不显示。
3、\是转义符号,这里可以不用。
4、两遍是因为要匹配两个地方,10和11
发表于 2016-5-5 14:18:13 | 显示全部楼层
去掉没用的项目,可以这么写
(?:.*?,){9}(.*?),(.*?),
发表于 2016-5-5 14:21:40 | 显示全部楼层
回复  1361739590


    afan版主回贴了竟然不问他,他是正则大牛!不对,是正则之神!不对,是正则神牛 ...
haijie1223 发表于 2016-5-5 14:16



    除了神什么油  其它的我给满分
 楼主| 发表于 2016-5-5 14:39:04 | 显示全部楼层
回复 8# haijie1223


    谢谢。
 楼主| 发表于 2016-5-5 14:40:19 | 显示全部楼层
回复 10# afan


    经常看到回答正则问题。这里想问一下,这个可以用 StringRegExpReplace 这个函数来替换第10里面的内容么?
 楼主| 发表于 2016-5-5 15:17:25 | 显示全部楼层
回复 10# afan

   ?    匹配前面的子表达式零次或一次
想问一下下面的问题:
  1.  .*  是指  除“\n”之外的任何单个字符零次或多次么?包括 , 这个符号吧。
  2.  (.*?),     前面的子表达式是指   .*   这个么?是的话这个  零次或一次  怎么理解呢?
3. 其实就是想知道    这样写 (.*?),   能匹配  1, 或 2, 或 3, ..
    (.*),   这样写只能匹配   1,2,3,.....20   这一个结果,   就是这个  ?  的原理。
发表于 2016-5-5 15:30:38 | 显示全部楼层
回复  afan


    经常看到回答正则问题。这里想问一下,这个可以用 StringRegExpReplace 这个函数来替 ...
1361739590 发表于 2016-5-5 14:40



    当然可以
发表于 2016-5-5 15:35:23 | 显示全部楼层
回复  afan

   ?    匹配前面的子表达式零次或一次
想问一下下面的问题:
  1.  .*  是指  除“\n”之 ...
1361739590 发表于 2016-5-5 15:17



A1, 是的
A2, ?在*、+后面不是0或1次,而是在符合匹配右边的条件下最小字符量
A3, 同A2
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-17 02:42 , Processed in 0.081779 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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