AHK的正则表达式相关文档(三)

RegExReplace()

函数功能:替换字符串中匹配模式(正则表达式)出现的地方。

NewStr := RegExReplace(Haystack, NeedleRegEx [, Replacement = "", OutputVarCount = "", Limit = -1, StartingPosition = 1])

参数

NewStr
RegExReplace() 返回内容被替换过的 Haystack 版本. 如果没有发生替换操作, 则返回的 Haystack 保持不变. 如果遇到错误 (例如 NeedleRegEx 出现语法错误), 则返回的 Haystack 保持不变 (不过如果在早于 1.0.46.06 的版本中, 会返回 "") 同时设置 ErrorLevel 为 下面 的其中一个值而不是 0.

Haystack
源字符串.

NeedleRegEx
要搜索的模式, 它是兼容 Perl 的正则表达式 (PCRE). 模式的选项(如果有)必须放在模式字符串的开始且后面跟着闭括号。例如, 模式 "i)abc.*123" 将匹配不区分大小写的 "abc", 接着零个或多个任意字符, 并以 "123" 结尾的字符串. 如果不含选项, 则可以省略 ")"; 例如, ")abc" 等同于 "abc".

Replacement
用来替换每个匹配的字符串, 它是普通文本 (不是正则表达式). 此参数可以包含像 $1 这样的后向引用, 它引用了 Haystack 中匹配首个 子模式 的子字符串. 最简单的后向引用是从 $0 到 $9, 其中 $0 是匹配整个模式的子字符串, $1 是匹配首个子模式的子字符串, $2 是第二个, 依此类推. 对于大于 9 的后向引用 (对于小于等于 9 的那些, 这是可选的), 需要把数字括在大括号中; 例如 ${10}, ${11}, 依此类推. 对于 命名子模式, 需要将名称括在大括号中; 例如 ${SubpatternName}. 要指定原义的 $, 请使用 $$ (这是唯一需要特殊处理的字符; 反斜杠不需要转义).

要转换子模式的大小写, 请在 $ 后跟着下列字符的其中一个: U 或 u (大写), L 或 l (小写), T 或 t (标题格式, 此时每个单词的首字母大写, 而把其他的所有字母改成小写). 例如, $U1 和 $U{1} 都会把首个子模式转换成大写的版本.

不存在的后向引用和不匹配 Haystack 中任何字符串的模式,例如“(abc)|(xyz)”中的一个子模式,会被转译为空字符串。

OutputVarCount
用来保存替换次数 (如果没有则为 0) 的未引用的变量名 (即不需要使用百分号包围).

Limit
如果省略 Limit, 则它默认为 -1, 此时会替换 Haystack 中 所有 发现匹配模式的地方. 否则, 请指定允许替换的最大次数. Haystack 中最后一次替换位置右边的部分将保持不变.

StartingPosition
如果省略 StartingPosition, 则它默认为 1 (从 Haystack 的首个字符开始). 否则, 从第二个字符开始请指定 2, 第三个开始为 3, 依此类推. 如果 StartingPosition 超过了 Haystack 的长度, 则搜索会从 Haystack 末尾后的空字符串开始 (这通常会导致没有替换发生).

如果 StartingPosition 小于 1, 则它被视为从 Haystack 末尾开始的偏移. 例如, 0 表示从最后一个字符开始而 -1 则从倒数第二个字符开始. 如果 StartingPosition 超出了 Haystack 最左边的位置, 则会搜索整个 Haystack.

不论 StartingPosition 的值是什么, 返回值总是 Haystack 的完整副本, 唯一的区别是比起 StartingPosition 为 1 时发生的情况此时源字符串左边可能更多的部分保持不变.

ErrorLevel

[v1.1.04+] 此函数失败时会抛出异常 (这个不会和 "没有找到匹配" 冲突, 失败表示匹配过程中遇到问题, 而 "没有找到匹配" 表示匹配过程成功完成只是没有发现匹配). 想了解更多信息, 请参阅 运行时错误.

ErrorLevel 被设置为下列值的其中一个:

  • 0, 表示没有遇到错误.
  • 一个如下格式的字符串: Compile error N at offset M: description. 在此字符串中, N 是 PCRE 错误值, M 是正则表达式中出现错误的字符的位置, 而 description 是描述这个错误的文本.
  • 一个负数, 表示在正则表达式 执行 时遇到的错误. 尽管这样的错误很罕见, 然而像这些情况就容易出现这种错误, 例如 "太多空字符串匹配" (-22), "递归太深" (-21) 以及 "达到匹配限制" (-8). 如果出现这些情况, 请尝试重新设计更严格的匹配模式, 例如无论是否可行都把每个 * 替换为 ?, + 或像 {0,3} 这样的限制.

选项

请参阅 选项 >> 了解修饰符, 例如 "i)abc", 里面的选项关闭了 "abc" 模式中的区分大小写匹配.

性能

要进行简单的子字符串替换, 请使用 StringReplace, 因为它比 RegExReplace() 执行地更快.

如果您知道替换的最大次数是多少, 请在 Limit 参数中指定来提高性能, 因为这样可以早一些停止搜索 (这样也可能会降低在替换操作过程中占用的系统内存). 例如, 如果您知道在一个大字符串的开始处仅有一个匹配, 请指定最大次数为 1.

为了提升性能, 最近使用的 100 个正则表达式会被缓存在内存中 (以已编译的形式).

多次使用一个正则表达式时 (例如在循环中), 使用 研究选项 (S) 可以提高性能.

备注

大多数字符 (例如 abc123) 可以直接使用在正则表达式中. 然而, \.*?+[{|()^$ 这些字符则必须在其前面加上反斜线来进行匹配. 例如, \. 表示一个原义的句点而 \\ 表示一个原义的反斜线. 使用 \Q...\E 能避免转义. 例如:\QLiteral Text\E。

在正则表达式中, 特殊字符 (如制表符和新行符) 可以使用一个重音符 (`) 或反斜线 (\) 进行转义. 例如, `t 等同于 \t.

要了解正则表达式的基础 (或复习正则表达式的语法), 请参阅 AHK的正则表达式相关文档(一).

时间: 2024-10-07 20:58:27

AHK的正则表达式相关文档(三)的相关文章

AHK的正则表达式相关文档(二)

RegExMatch() 函数功能:判断字符串是否包含某个匹配模式(正则表达式). FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1]) 参数 FoundPosRegExMatch() 返回 NeedleRegEx 在字符串 Haystack 中最左边的出现位置. 首个字符位置为 1. 如果没有找到匹配模式则返回零. 如果遇到错误 (例如 Needle

AHK的正则表达式相关文档(一)

正则表达式(RegEx)——快速参考 基础知识 在任意位置进行匹配: 默认情况下, 正则表达式可以匹配被搜索字符串的 任意位置 的子字符串. 例如, 正则表达式 abc 可以匹配 abc123, 123abc 以及 123abcxyz. 要限制在开始或末尾进行匹配, 请使用 锚. 转义字符: 大多数字符 (例如 abc123) 可以直接使用在正则表达式中. 然而, \.*?+[{|()^$ 这些字符则必须在其前面加上反斜线来进行匹配. 例如, \. 表示一个原义的句点而 \\ 表示一个原义的反斜

iOS Foundation 框架 224 篇相关文档分类整理

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 截至 2014-05-02 ,苹果官网 Foundation 框架相关文档共计 224 篇,分类如下: Foundation 框架概述文档:常量.

dotNET跨平台相关文档

dotNET跨平台相关文档整理 一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在Mono的学习研究和推广,从<国内 Mono 相关文章汇总>你可以看到博客园有很多的同仁在探索学习,逐步形成了一个小圈子,这个圈子里的很多都是非Windows平台上运行C#程序,特别是MVP 刘冰的Web服务器Jexus 为我们dotNET跨平台提供了一个工业级的应用

[转载]正则表达式参考文档 - Regular Expression Syntax Reference.

正则表达式参考文档 - Regular Expression Syntax Reference. [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref.htm] 引言 正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征.比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征.

dotNET跨平台相关文档整理

一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在Mono的学习研究和推广,从<国内 Mono 相关文章汇总>你可以看到博客园有很多的同仁在探索学习,逐步形成了一个小圈子,这个圈子里的很多都是非Windows平台上运行C#程序,特别是MVP 刘冰的Web服务器Jexus 为我们dotNET跨平台提供了一个工业级的应用服务器,这个圈子里的同仁对于Mo

各新旧版本Java及其相关文档可以从这里下载

http://www.oracle.com/technetwork/java/archive-139210.html 各新旧版本Java及其相关文档可以从这里下载

rn相关文档

RN相关文档: rn文档:https://reactnative.cn/ mbox文档:https://cn.mobx.js.org/ es6文档:http://es6.ruanyifeng.com/ flex布局文档:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html react相关npm包的查询:https://js.coach 原文地址:https://www.cnblogs.com/liujinyu/p/10202295.ht

Android开发之深入理解Android 7.0系统权限更改相关文档

摘要: Android 6.0之后的版本增加了运行时权限,应用程序在执行每个需要系统权限的功能时,需要添加权限请求代码(默认权限禁止),否则应用程序无法响应:Android 7.0在Android 6.0的基础上,对系统权限进一步更改,这次的权限更改包括三个方面: APP应用程序的私有文件不再向使用者放宽 Intent组件传递file://URI的方式可能给接收器留下无法访问的路径,触发FileUriExposedException异常,推荐使用FileProvider DownloadMana