找回密码
 加入
搜索
查看: 2796|回复: 5

[AU3基础] [已解决]正则替换,需要多加一个空格才能成功,这是为什么?

[复制链接]
发表于 2013-10-6 19:46:37 | 显示全部楼层 |阅读模式
本帖最后由 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的后面如果不加一个空格,则无法正常替换,这是为什么啊?
 楼主| 发表于 2013-10-6 20:15:37 | 显示全部楼层
仔细研究了几个小时,好像不加空格,那个$1就会和后面的133连在一起, 难道是这个原因让函数当成$1133来实别了?
    如果真是这样,那要怎么解决呢?
发表于 2013-10-6 20:43:05 | 显示全部楼层
$s1 = StringRegExpReplace($s, '<Tel>((?s).*)</Tel>', '<Tel>${1}133' & @CRLF & '</Tel>')
这样试下
 楼主| 发表于 2013-10-6 23:06:54 | 显示全部楼层
回复 3# kevinch


     正则实在是太难学了,搞了半个月都没搞明白。

已解决,非常感谢。
发表于 2013-10-6 23:10:08 | 显示全部楼层
回复 2# CHEARV

有关这方面的帮助说明:
注意/说明
To separate back-references from actual (replaced) numbers, wrap it with half-round brackets, i.e: "${1}5".

用花括号把“逆向引用”括起来,以此来分隔真实(替换)的数字;比如:“${1}5".
 楼主| 发表于 2013-10-6 23:30:28 | 显示全部楼层
回复 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}

代表指定命名分组捕获到的内容。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 19:23 , Processed in 0.081425 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表