[已解决]正则替换,需要多加一个空格才能成功,这是为什么?
本帖最后由 CHEARV 于 2013-10-6 23:07 编辑$s = '<Tel>' & @CRLF & '</Tel>' & @CRLF & '<Add>' & @CRLF & '</Add>' & @CRLF
$s1 = StringRegExpReplace($s, '<Tel>((?s).*)</Tel>', '<Tel>$1' & '133' & @CRLF & '</Tel>')
MsgBox(0, "表达式未加空格的结果", $s1)
$s2 = StringRegExpReplace($s, '<Tel>((?s).*)</Tel>', '<Tel>$1 ' & '133' & @CRLF & '</Tel>')
MsgBox(0, "表达式多一个空格的结果", $s2)
在表达式<Tel>$1的后面如果不加一个空格,则无法正常替换,这是为什么啊? 仔细研究了几个小时,好像不加空格,那个$1就会和后面的133连在一起, 难道是这个原因让函数当成$1133来实别了?
如果真是这样,那要怎么解决呢? $s1 = StringRegExpReplace($s, '<Tel>((?s).*)</Tel>', '<Tel>${1}133' & @CRLF & '</Tel>')这样试下 回复 3# kevinch
正则实在是太难学了,搞了半个月都没搞明白。
已解决,非常感谢。 回复 2# CHEARV
有关这方面的帮助说明:
注意/说明
To separate back-references from actual (replaced) numbers, wrap it with half-round brackets, i.e: "${1}5".
用花括号把“逆向引用”括起来,以此来分隔真实(替换)的数字;比如:“${1}5". 回复 5# user3000
非常谢谢,那个帮助资料我看过了,但上面一大部分还是英文,我实在是看不懂。如果谁能把那份资料再完整的翻译一下就好了。
之前看过水木子制作的那个工具里在附带的帮助,
里面有这样一段介绍
DEELX 最多将 3 位数字识别为反向引用,如果想在表达式中表示 \1 外加一个字符 2 ,那么应该写成 \0012。在 DEELX 中,不管是否有第 12 对括号,写成 \12 都表示对第 12 对括号的引用。
后来我试着将$1 改成 $001 ,也还是不行。
刚刚看了你的介绍,我又去查了一下中文资料,里面有写,但我之前没有理解到。
Replace 替换操作
对匹配到的字符串进行替换操作。
--------------------------------------------------------------------------------
说明
$1 ~ $999
代表某个捕获组捕获到的内容。如果捕获组编号大于表达式中的最大捕获组编号,那么 DEELX 会减少数字个数,以使捕获组编号小于或等于最大编号;而把剩余的数字看作字符串常量。
举例:
当前最大捕获组编号为 20,那么,指定替换为 "$999" 将被看作 "$9" + "99";指定替换为 "$15" 将代表第 15 个捕获组。如果本来就是想把 "5" 当成字符串常量时("$1" + "5"),可以使用 $0015 表示,DEELX 最多识别 3 位 10 进制数字。
--------------------------------------------------------------------------------
${name}
代表指定命名分组捕获到的内容。
页:
[1]