CHEARV 发表于 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的后面如果不加一个空格,则无法正常替换,这是为什么啊?

CHEARV 发表于 2013-10-6 20:15:37

仔细研究了几个小时,好像不加空格,那个$1就会和后面的133连在一起, 难道是这个原因让函数当成$1133来实别了?
    如果真是这样,那要怎么解决呢?

kevinch 发表于 2013-10-6 20:43:05

$s1 = StringRegExpReplace($s, '<Tel>((?s).*)</Tel>', '<Tel>${1}133' & @CRLF & '</Tel>')这样试下

CHEARV 发表于 2013-10-6 23:06:54

回复 3# kevinch


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

已解决,非常感谢。

user3000 发表于 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".

CHEARV 发表于 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}

代表指定命名分组捕获到的内容。
页: [1]
查看完整版本: [已解决]正则替换,需要多加一个空格才能成功,这是为什么?