找回密码
 加入
搜索
楼主: 35888894

[效率算法] 【已解决】正则表达式相关问题

 火.. [复制链接]
发表于 2012-12-4 14:44:23 | 显示全部楼层
回复 12# 35888894

不对哦,那个叫预查,或者零宽断言或者环视,这两个都放在要匹配的表达式的后面,"="号表示匹配(是,或者说肯定),"!"表示否定~~
如果要放在前面就要用小于号"<",它们的作用都是:声明某个位置存在或者不存在一个事实!并且他们不占有字符~~

评分

参与人数 1金钱 +10 收起 理由
35888894 + 10 感谢

查看全部评分

发表于 2012-12-4 17:29:30 | 显示全部楼层
本帖最后由 lixiaolong 于 2012-12-4 17:30 编辑

回复 8# afan

嗯,好久没玩autoit我没想到...谢谢提醒!
#include <Array.au3>
 
$Str = '....asd>title=234<1223>编辑<duwhuierhuhdysferij>title=123<asuhudubugadu>title=12a<....'
 
Local $Test = StringRegExp($Str, '(?:编辑)|(title\=\w+)(?!.*编辑)', 3)
If $Test[0] <> "编辑" Then Exit

_ArrayDelete($Test, 0)
_ArrayDisplay($Test, UBound($Test))
 楼主| 发表于 2012-12-4 18:04:29 | 显示全部楼层
回复 16# 轩辕小妖

感谢指正,但是我是这么理解的,你看看对不对啊
(?!.*?编辑)就是从字符串中编辑后面来进行匹配
(?=.*?编辑)就是从字符串中编辑前面里进行匹配
经过测试,我觉这个只是起到了一个“声明”的作用就好比(?s)一样
 楼主| 发表于 2012-12-4 18:08:30 | 显示全部楼层
回复 15# afan
你这个表达式只能取到一个title=xx,如果说含有多个title=xxx就抓取不到了
发表于 2012-12-4 20:14:02 | 显示全部楼层
回复 18# 35888894

是的,就是这样~~~

上面的表达式,因为有了.*,所以第一个是表示:只在部分字符串中搜索匹配,的后面不能有"编辑",所以如果你的字符串中有多个"编辑",就是从最后一个开始
后面的相似~~~

嗯,它就是起到了一个"声明"的作用,所以有些人叫它做"断言",又因为它不消耗字符,所以叫"零宽"(类似的还有^$\b\B等)!
?s是告诉搜索引擎,要它改变符号"."的匹配行为,可以匹配换行符"\n"

另外:别"有眼不识泰山"哦,Afan超版是我们AU3论坛的正则第一人,号称正则之神哦,别小看他...应该多向他请教~~非常热心,非常nice的一枚帅哥~

评分

参与人数 2金钱 +90 贡献 +2 收起 理由
35888894 + 60 必须顶你~ 尤其是最后一句:)
afan + 30 + 2 解释得很详细

查看全部评分

发表于 2012-12-4 20:35:19 | 显示全部楼层
回复  35888894

是的,就是这样~~~

上面的表达式,因为有了.*,所以第一个是表示:只在这部分字符串中搜 ...
轩辕小妖 发表于 2012-12-4 20:14



    论坛的正则神人有 pcbar、Duvet、binghc 等,我只是经常混简单问题多留下了点痕迹而已,其实,我才刚入门…

评分

参与人数 1金钱 +20 收起 理由
35888894 + 20 A版的强大,我们有目共睹哈

查看全部评分

发表于 2012-12-4 21:22:04 | 显示全部楼层
回复 21# afan

A大,你这谦虚得接近虚伪了哦~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-18 09:29 , Processed in 0.144227 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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