找回密码
 加入
搜索
查看: 6561|回复: 15

[AU3基础] [已解决]简单的正则,我怎么无法解决?

 火.. [复制链接]
发表于 2011-1-13 09:46:35 | 显示全部楼层 |阅读模式
本帖最后由 newuser 于 2011-1-13 10:54 编辑

就是用正则替换清除行尾的345
12345 1265345
2345
用345$ 或  (?m)345$ 表示要查找的字符串,用  \1 清除他们,但没有OK?
发表于 2011-1-13 09:50:51 | 显示全部楼层

本帖子中包含更多资源

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

×
 楼主| 发表于 2011-1-13 10:02:10 | 显示全部楼层
本帖最后由 newuser 于 2011-1-13 10:14 编辑

回复 2# 水木子
我的叙述混乱,还是贴图吧!

本帖子中包含更多资源

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

×
发表于 2011-1-13 10:07:36 | 显示全部楼层
不好意思,没注意你给出的原字符串。
发表于 2011-1-13 10:22:21 | 显示全部楼层
用这个试试:345$|(345)(?=\r)
 楼主| 发表于 2011-1-13 10:43:48 | 显示全部楼层
回复 5# 3mile
非常感谢,解决了,请问
(?m)345$他是只能匹配某一行的尾部的345而不是所有行尾部是345的部分吗?
那如果我想匹配所有行尾部是345该怎么做?是用阁下提供的(345)(?=\r)吗?
发表于 2011-1-13 10:48:34 | 显示全部楼层
回复 6# newuser
关于(?m)345$只能匹配尾行尾部的345这个问题我也非常疑惑。书中有这样一句:“如果正则表达式的匹配模式为 MULTILINE 模式,^ 可匹配一行文本的行首,$ 可匹配一行文本的行末。”难道是AU3的正则式有问题?
 楼主| 发表于 2011-1-13 10:53:48 | 显示全部楼层
回复 7# 3mile
啊!我的疑惑和老大一样,呵呵!
发表于 2011-1-13 10:57:34 | 显示全部楼层
确实!如果从表达式“字面”理解、
其结果应该是:

12345 1265
2

但得到得结果并不是我们所理解的那样。
发表于 2011-1-13 11:33:28 | 显示全部楼层
回复 8# newuser
回复 9# 水木子
查了很久,终于查到了。原来是软硬回车引起的。
有这么一段:Multiline(多行模式):更改^和$的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。(在此模式下,$的精确含意是:匹配\n之前的位置以及字符串结束前的位置.)
哈哈,原来是WINDOWS的回车造成的,/r=(@CR, chr(13)),/n=匹配换行符 (@LF, chr(10)).
看到这里应该说我们的理解没有问题,问题在WINDOWS对于换行的定义。
$str='12345 65412345'&@CRLF & _
'2564345'&@CRLF & _
'556312345'
$temp=StringRegExpReplace($str,'\r','')
MsgBox(0,'去掉\r',$temp)
$fin=StringRegExpReplace($temp,'(?m)345$','')
MsgBox(0,0,$fin)

评分

参与人数 2金钱 +130 收起 理由
水木子 + 100 嗦嘚斯嘞!
newuser + 30 非常感谢,这么细节的东西,我恐怕读多少遍相 ...

查看全部评分

 楼主| 发表于 2011-1-13 13:52:50 | 显示全部楼层
回复 10# 3mile
这么理解每一行尾的看不到的东西:
..........$\n\r
而(?m)是匹配换行符内的东西,所以如果要在行尾做替换或清除的操作,应先将硬回车\r给清除掉,(?m)345$才能匹配到每一行有345部分的尾部.
发表于 2011-1-13 14:36:44 | 显示全部楼层
Local $Str = _
                '12345 1265345' & @CRLF & _
                '2345' & @CRLF & _
                '23434' & @CRLF
;MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExpReplace($str, '345(?=\v|$)', '')
MsgBox(0, '替换结果', $Test)
 楼主| 发表于 2011-1-13 16:09:25 | 显示全部楼层
回复 12# afan
条条大路能解决,而不是只看到某个答案,以后要多向老大们学习.
发表于 2011-8-20 23:28:42 | 显示全部楼层
学习,确实要向老大们学习!!
发表于 2011-9-15 22:45:13 | 显示全部楼层
Local $Str = _
                '12345 1265345' & @CRLF & _
                '2345' & @CRLF & _
                '23434' & @CRLF

;MsgBox(0, '原字符串', $Str)

Local $Test = StringRegExpReplace($str, '345\r', @cr)

MsgBox(0, '替换结果', $Test)
AFAN的都用到断言了,菜菜们真的不懂,贴一个sky808的答案,方便查阅!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-19 01:18 , Processed in 0.087306 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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