找回密码
 加入
搜索
查看: 2413|回复: 2

[系统综合] 正则问题:当捕获括号碰到了“|”!

[复制链接]
发表于 2011-2-14 21:25:14 | 显示全部楼层 |阅读模式
本帖最后由 binghc 于 2011-2-14 21:59 编辑

问题模型:
字符串:使用正则表达式是搜寻字串的一个轻巧的方法
现在用捕获型括号匹配几个字段:
表达式:(方法)|(表达式)
匹配结果如图所示:


一开始,我想了很久为什么会返回3个结果,为什么会有空字符返回。
au3正则的括号有时候是很方便:直接返回括号里面匹配的字符串,其他匹配的字符串一律屏蔽。
但是一旦这个括号碰到了“|”,麻烦来了。
我对出现上面这样的结果的解释是,这个捕获括号就好像是一个变量,只要表达式中出现捕获括
号,au3的正则引擎就会开辟一个存储这个变量的空间,不管最后这个空间里面有没有捕获到内
容最后都作为一条匹配结果返回给用户,不对,这么说好像还不够准确。应该说在表达式中出现过捕获括号,
并且正则引擎尝试用这个括号里面的表达式去匹配目标文本的时候,正则引擎就会开辟一个空间用来存放括号
里的表达式匹配的字符串,而不管这个括号最后有没有捕获到内容,不信的话可以多加几个"|",
归纳一句话:只要正则引擎尝试用捕获括号内的表达式去匹配文本,不管匹配成功与否,都会把这个“变量”作为一条匹配结果返回给用户

说明:本人也是在实战中碰到的问题,而这个问题的根源就是上面问题模型,多了不该存在这个空结果

我想问,在上面这种表达式结构基础上(在“|”的两边都存在捕获括号),能不能不让出现这种空字符?
我的意思是,如果这个“空间”没有捕获到字符串,能不能屏蔽它
(不要跟我说把上面“|”两边的括号位置调换一下,因为实战中是没办法确定的)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-2-14 23:18:13 | 显示全部楼层
使用非捕获组(?:方法)|(?:表达式)

通过python中测试得出 其他(方法)|(表达式)捕获到list是
array[0][0]=''
array[0][1]='表达式'
array[1][0]='方法'
array[1][1]=''

这是由于分组未匹配到数据引起的。
 楼主| 发表于 2011-2-15 10:15:03 | 显示全部楼层
好吧,其实我又错了,这个变量,不一定是正则引擎尝试用括号内的表达式去匹配文本才开辟空间,就算不尝试也开辟空间,直到“|”之后的括号里的表达式匹配成功后才停止开辟这种空间,这之前的捕获括号就算跳过尝试匹配也照样开辟
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-21 12:29 , Processed in 0.081806 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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