替换字符串中匹配模式(正则表达式) 出现的地方.
NewStr := RegExReplace(Haystack, NeedleRegEx , Replacement := "", OutputVarCount := "", Limit := -1, StartingPosition := 1)
源字符串.
要搜索的模式, 它是兼容 Perl 的正则表达式(PCRE). 模式的选项(如果有) 必须放在模式字符串的开始且后面跟着闭括号. 例如, 模式 "i)abc.*123" 将匹配不区分大小写的 "abc", 接着零个或多个任意字符, 并以 "123" 结尾的字符串. 如果不含选项, 则可以省略 ")"; 例如, ")abc" 等同于 "abc".
用来替换每个匹配的字符串, 它是普通文本(不是正则表达式). 此参数可以包含像 $1 这样的后向引用, 它引用了 Haystack 中匹配首个子模式的子字符串. 最简单的后向引用是从 $0 到 $9, 其中 $0 是匹配整个模式的子字符串, $1 是匹配首个子模式的子字符串, $2 是第二个, 依此类推. 对于大于 9 的后向引用(对于小于等于 9 的那些, 这是可选的), 需要把数字括在大括号中; 例如 ${10}, ${11}, 依此类推. 对于命名子模式, 需要将名称括在大括号中; 例如 ${SubpatternName}. 要指定原义的 $, 请使用 $$(这是唯一需要特殊处理的字符; 反斜杠不需要转义).
要转换子模式的大小写, 请在 $ 后跟着下列字符的其中一个: U 或 u(大写), L 或 l(小写), T 或 t(标题格式, 此时每个单词的首字母大写, 而把其他的所有字母改成小写). 例如, $U1 和 $U{1} 都会把首个子模式转换成大写的版本.
不存在的后向引用和不匹配 Haystack 中任何字符串的模式, 例如"(abc)|(xyz)"中的一个子模式, 会被转译为空字符串.
指定一个变量, 用来保存替换次数(如果没有则为 0).
如果省略 Limit, 则它默认为 -1, 此时会替换 Haystack 中 所有 发现匹配模式的地方. 否则, 请指定允许替换的最大次数. Haystack 中最后一次替换位置右边的部分将保持不变.
如果省略 StartingPosition, 则它默认为 1(从 Haystack 的首个字符开始). 否则, 从第二个字符开始请指定 2, 第三个开始为 3, 依此类推. 如果 StartingPosition 超过了 Haystack 的长度, 则搜索会从 Haystack 末尾后的空字符串开始(这通常会导致没有替换发生).
如果 StartingPosition 小于 1, 则它被视为从 Haystack 末尾开始的偏移. 例如, 0 表示从最后一个字符开始而 -1 则从倒数第二个字符开始. 如果 StartingPosition 超出了 Haystack 最左边的位置, 则会搜索整个 Haystack.
不论 StartingPosition 的值是什么, 返回值总是 Haystack 的完整副本, 唯一的区别是比起 StartingPosition 为 1 时发生的情况此时源字符串左边可能更多的部分保持不变.
函数将返回 Haystack 被替换之后的值. 如果没有发生替换, 将返回 Haystack 的原始值. 如果发生错误(比如 NeedleRegEx 出现语法错误), 同样返回 Haystack 的原始值(除非是 1.0.46.06 之前的版本, 将返回 "" 空字符串) 同时 ErrorLevel 被设为下面列表中除了 0 之外的值.
[v1.1.04+]: 此函数失败时会抛出异常(这个不会和 "没有找到匹配" 冲突, 失败表示匹配过程中遇到问题, 而 "没有找到匹配" 表示匹配过程成功完成只是没有发现匹配). 想了解更多信息, 请参阅运行时错误.
ErrorLevel 被设置为下列值的其中一个:
请参阅选项了解修饰符, 例如 "i)abc", 里面的选项关闭了 "abc" 模式中的区分大小写匹配.
要进行简单的子字符串替换, 请使用 StringReplace, 因为它比 RegExReplace() 执行地更快.
如果您知道替换的最大次数是多少, 请在 Limit 参数中指定来提高性能, 因为这样可以早一些停止搜索(这样也可能会降低在替换操作过程中占用的系统内存). 例如, 如果您知道在一个大字符串的开始处仅有一个匹配, 请指定最大次数为 1.
为了提升性能, 最近使用的 100 个正则表达式会被缓存在内存中(以已编译的形式).
多次使用一个正则表达式时(例如在循环中), 使用研究选项(S) 可以提高性能.
大多数字符(例如 abc123) 可以直接使用在正则表达式中. 然而, \.*?+[{|()^$ 这些字符则必须在其前面加上反斜杠来进行匹配. 例如, \. 表示一个原义的句点而 \\ 表示一个原义的反斜杠. 使用 \Q...\E 能避免转义. 例如: \QLiteral Text\E
.
在正则表达式中, 特殊字符(如制表符和换行符) 可以使用一个重音符(`) 或反斜杠(\) 进行转义. 例如, `t 等同于 \t.
要了解正则表达式的基础(或复习正则表达式的语法), 请参阅正则表达式快速参考.
RegExMatch(), 正则表达式快速参考, 正则表达式调出, StringReplace, InStr()
文本数据的常见来源: FileRead, UrlDownloadToFile, Clipboard, GUI Edit 控件
有关普通 RegEx 的示例, 请参阅正则表达式快速参考.
MsgBox % RegExReplace("abc123123", "123$", "xyz") ; 显示 "abc123xyz" , 因为 $ 导致只能在末尾形成匹配. MsgBox % RegExReplace("abc123", "i)^ABC") ; 显示 "123" 因为通过不区分大小写选项实现了匹配. MsgBox % RegExReplace("abcXYZ123", "abc(.*)123", "aaa$1zzz") ; 显示 "aaaXYZzzz" 其中使用了 $1 后向引用. MsgBox % RegExReplace("abc123abc456", "abc\d+", "", ReplacementCount) ; 显示 "" 并保存 2 到 ReplacementCount.