afan
发表于 2016-4-12 18:50:54
回复afan
A版,请教一下,\Q与\E中间的部分,可以是"普通字符串",也可以是"纯元字符",也可以是 ...
haijie1223 发表于 2016-4-12 18:46 http://www.autoitx.com/images/common/back.gif
\Q与\E之间的任何字符都以原始字符匹配
haijie1223
发表于 2016-4-12 19:12:43
回复 31# afan
明白~感谢!
hnfeng
发表于 2016-4-13 14:42:15
本帖最后由 hnfeng 于 2016-4-13 15:08 编辑
非常感谢两位版主的帮助
1、我写的问题确实有点乱,惭愧了
2、16楼确实是真正的意思
3、我一楼的这个正则表达式确实有问题,会吃掉IP后面的回车符,正如 17楼所说
4、26楼是完美的答案
5、又学到不少东东,再次感谢两位版本 @afan, @haijie1223
6、因有急事去电脑市场找设备,没上网看贴,未及时回帖,抱歉
hnfeng
发表于 2016-4-14 13:07:30
本帖最后由 hnfeng 于 2016-4-14 13:09 编辑
为了兼顾IP所在文本的各种情况,麻烦 @afan 再改改正则表达式。
目前的代码,当 IP 前后紧跟英文字符时,替换失败(结果中有部分IP未被替换)
#include <Array.au3>
Global $Text = "asasaf111.111.111.1aaa" & @CRLF & _
"asasaf111.111.111.1" & @CRLF & _
"111.111.111.11aaaa" & @CRLF & _
"asasaf111.111.111.11aaa" & @CRLF & _
"asasaf 111.111.111.111" & @CRLF & _
"asasaf 111.111.111.111aaaa" & @CRLF & _
"asasaf 111.111.111.111"
Global $a_IP_Add = [["111.111.111.1", "地址11111111111"], _
["111.111.111.11", "地址22222222222222222222"], _
["111.111.111.111", "地址33333"]]
For $i = 0 To UBound($a_IP_Add) - 1
$Text = StringRegExpReplace($Text, '\b\Q' & $a_IP_Add[$i] & '\E(?=\D|$)', $a_IP_Add[$i] & ' [' & $a_IP_Add[$i] & ']')
Next
MsgBox(0, "替换", $Text)
afan
发表于 2016-4-14 13:11:09
回复 34# hnfeng #include <Array.au3>
Global $Text = "asasaf111.111.111.1aaa" & @CRLF & _
"asasaf111.111.111.1" & @CRLF & _
"111.111.111.11aaaa" & @CRLF & _
"asasaf111.111.111.11aaa" & @CRLF & _
"asasaf 111.111.111.111" & @CRLF & _
"asasaf 111.111.111.111aaaa" & @CRLF & _
"asasaf 111.111.111.111"
Global $a_IP_Add = [["111.111.111.1", "地址11111111111"], _
["111.111.111.11", "地址22222222222222222222"], _
["111.111.111.111", "地址33333"]]
For $i = 0 To UBound($a_IP_Add) - 1
$Text = StringRegExpReplace($Text, '(?<=\D|^)\Q' & $a_IP_Add[$i] & '\E(?=\D|$)', $a_IP_Add[$i] & ' [' & $a_IP_Add[$i] & ']')
Next
MsgBox(0, "替换", $Text)
hnfeng
发表于 2016-4-14 13:55:24
回复 35# afan
多谢多谢,完美了
我也把获取IP的正则表达式前面 改为 (?<=\D|^) 后面改为 (?=\D|$)
太感谢了