haijie1223
发表于 2016-4-12 17:29:59
回复 15# afan
我猜楼主的意思是这样的:
原字符串:Local $Text = "asasaf 111.111.111.1aaa" & @CRLF & _
"asasaf 111.111.111.1" & @CRLF & _
"asasaf 111.111.111.11" & @CRLF & _
"asasaf 111.111.111.11aaa" & @CRLF & _
"asasaf 111.111.111.111" & @CRLF & _
"asasaf 111.111.111.111aaaa"目标字符串:asasaf 111.111.111.1 [地址11111111111]aaa
asasaf 111.111.111.1 [地址11111111111]
asasaf 111.111.111.11 [地址22222222222222222222]
asasaf 111.111.111.11 [地址22222222222222222222]aaa
asasaf 111.111.111.111 [地址33333]
asasaf 111.111.111.111 [地址33333]aaaa
afan
发表于 2016-4-12 17:40:23
回复 16# haijie1223
被你这么一说问题瞬间明朗了
不是源字符串丢\D的问题,因为\D可以拿@CRLF的@CR抵掉,因此不会出错,楼主没察觉而已…
关键在于:替换表达式里面含有“.”这个元字符…
haijie1223
发表于 2016-4-12 17:44:18
回复 17# afan
这个问题我也一直不是很明白,正则替换表达式中的".",是正则中的匹配所有字符的意义,还是就表示"."本身。
afan
发表于 2016-4-12 17:46:21
回复afan
这个问题我也一直不是很明白,正则替换表达式中的".",是正则中的匹配所有字符的意义 ...
haijie1223 发表于 2016-4-12 17:44 http://www.autoitx.com/images/common/back.gif
“.”既然是元字符,当然不是“.”其本身字符
haijie1223
发表于 2016-4-12 17:48:24
回复 19# afan
那要用\.进行转义喽
afan
发表于 2016-4-12 17:52:23
回复afan
那要用\.进行转义喽
haijie1223 发表于 2016-4-12 17:48 http://www.autoitx.com/images/common/back.gif
是的楼主在5#想到了这一点但未停留… {:1_492:}
zghwelcome
发表于 2016-4-12 17:56:18
两位一问一答,楼主始终不现身说法啊{:face (197):}
haijie1223
发表于 2016-4-12 17:59:05
回复 21# afan
#include <Array.au3>
Global $Text = "asasaf 111.111.111.1aaa" & @CRLF & _
"asasaf 111.111.111.1" & @CRLF & _
"asasaf 111.111.111.11" & @CRLF & _
"asasaf 111.111.111.11aaa" & @CRLF & _
"asasaf 111.111.111.111" & @CRLF & _
"asasaf 111.111.111.111aaaa"
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, $a_IP_Add[$i] & "(\D)", $a_IP_Add[$i] & " [" & $a_IP_Add[$i] & "]\1")
Next
MsgBox(0, "替换", $Text)
haijie1223
发表于 2016-4-12 18:06:52
回复 21# afan
多谢A版指点,这回记住了。
afan
发表于 2016-4-12 18:11:42
回复afan
haijie1223 发表于 2016-4-12 17:59 http://www.autoitx.com/images/common/back.gif
你这个有些麻烦,每个都要\转义一下; 而且,如果诸如以“111.111.111.111”作为整段结尾则不会替换最后的。Global $Text = "asasaf 111.111.111.1aaa" & @CRLF & _
"asasaf 111.111.111.1" & @CRLF & _
"asasaf 111.111.111.11" & @CRLF & _
"asasaf 111.111.111.11aaa" & @CRLF & _
"asasaf 111.111.111.111" & @CRLF & _
"asasaf 111.111.111.111aaaa" & @CRLF & _
"asasaf 111.111.111.111"
afan
发表于 2016-4-12 18:13:27
回复 24# haijie1223
试试这样#include <Array.au3>
Global $Text = "asasaf 111.111.111.1aaa" & @CRLF & _
"asasaf 111.111.111.1" & @CRLF & _
"asasaf 111.111.111.11" & @CRLF & _
"asasaf 111.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)
haijie1223
发表于 2016-4-12 18:23:31
回复 26# afan
感谢A版,又赚到了。。。{:face (427):}
afan
发表于 2016-4-12 18:24:43
回复afan
感谢A版,又赚到了。。。
haijie1223 发表于 2016-4-12 18:23 http://www.autoitx.com/images/common/back.gif
感谢发哥偶也赚了… {:1_587:}
afan
发表于 2016-4-12 18:26:07
两位一问一答,楼主始终不现身说法啊
zghwelcome 发表于 2016-4-12 17:56 http://www.autoitx.com/images/common/back.gif
因为楼主自我解决就完事了 放心如果发现问题会回访的{:face (303):}
haijie1223
发表于 2016-4-12 18:46:37
回复 26# afan
A版,请教一下,\Q与\E中间的部分,可以是"普通字符串",也可以是"纯元字符",也可以是"元字符和普通字符的混合字符串",是不是这样?