newuser 发表于 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

newuser 发表于 2011-1-13 10:02:10

本帖最后由 newuser 于 2011-1-13 10:14 编辑

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

水木子 发表于 2011-1-13 10:07:36

不好意思,没注意你给出的原字符串。

3mile 发表于 2011-1-13 10:22:21

用这个试试:345$|(345)(?=\r)

newuser 发表于 2011-1-13 10:43:48

回复 5# 3mile
非常感谢,解决了,请问
(?m)345$他是只能匹配某一行的尾部的345而不是所有行尾部是345的部分吗?
那如果我想匹配所有行尾部是345该怎么做?是用阁下提供的(345)(?=\r)吗?

3mile 发表于 2011-1-13 10:48:34

回复 6# newuser
关于(?m)345$只能匹配尾行尾部的345这个问题我也非常疑惑。书中有这样一句:“如果正则表达式的匹配模式为 MULTILINE 模式,^ 可匹配一行文本的行首,$ 可匹配一行文本的行末。”难道是AU3的正则式有问题?

newuser 发表于 2011-1-13 10:53:48

回复 7# 3mile
啊!我的疑惑和老大一样,呵呵!

水木子 发表于 2011-1-13 10:57:34

确实!如果从表达式“字面”理解、
其结果应该是:

12345 1265
2

但得到得结果并不是我们所理解的那样。

3mile 发表于 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)

newuser 发表于 2011-1-13 13:52:50

回复 10# 3mile
这么理解每一行尾的看不到的东西:
..........$\n\r
而(?m)是匹配换行符内的东西,所以如果要在行尾做替换或清除的操作,应先将硬回车\r给清除掉,(?m)345$才能匹配到每一行有345部分的尾部.

afan 发表于 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)

newuser 发表于 2011-1-13 16:09:25

回复 12# afan
条条大路能解决,而不是只看到某个答案,以后要多向老大们学习.

learn321 发表于 2011-8-20 23:28:42

学习,确实要向老大们学习!!

gzh888666 发表于 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的答案,方便查阅!
页: [1] 2
查看完整版本: [已解决]简单的正则,我怎么无法解决?