[已解决]简单的正则,我怎么无法解决?
本帖最后由 newuser 于 2011-1-13 10:54 编辑就是用正则替换清除行尾的345
12345 1265345
2345
用345$ 或(?m)345$ 表示要查找的字符串,用\1 清除他们,但没有OK? 本帖最后由 newuser 于 2011-1-13 10:14 编辑
回复 2# 水木子
我的叙述混乱,还是贴图吧!
不好意思,没注意你给出的原字符串。 用这个试试:345$|(345)(?=\r) 回复 5# 3mile
非常感谢,解决了,请问
(?m)345$他是只能匹配某一行的尾部的345而不是所有行尾部是345的部分吗?
那如果我想匹配所有行尾部是345该怎么做?是用阁下提供的(345)(?=\r)吗? 回复 6# newuser
关于(?m)345$只能匹配尾行尾部的345这个问题我也非常疑惑。书中有这样一句:“如果正则表达式的匹配模式为 MULTILINE 模式,^ 可匹配一行文本的行首,$ 可匹配一行文本的行末。”难道是AU3的正则式有问题? 回复 7# 3mile
啊!我的疑惑和老大一样,呵呵! 确实!如果从表达式“字面”理解、
其结果应该是:
12345 1265
2
但得到得结果并不是我们所理解的那样。 回复 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) 回复 10# 3mile
这么理解每一行尾的看不到的东西:
..........$\n\r
而(?m)是匹配换行符内的东西,所以如果要在行尾做替换或清除的操作,应先将硬回车\r给清除掉,(?m)345$才能匹配到每一行有345部分的尾部. Local $Str = _
'12345 1265345' & @CRLF & _
'2345' & @CRLF & _
'23434' & @CRLF
;MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExpReplace($str, '345(?=\v|$)', '')
MsgBox(0, '替换结果', $Test) 回复 12# afan
条条大路能解决,而不是只看到某个答案,以后要多向老大们学习. 学习,确实要向老大们学习!! Local $Str = _
'12345 1265345' & @CRLF & _
'2345' & @CRLF & _
'23434' & @CRLF
;MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExpReplace($str, '345\r', @cr)
MsgBox(0, '替换结果', $Test)AFAN的都用到断言了,菜菜们真的不懂,贴一个sky808的答案,方便查阅!
页:
[1]
2