au3 正则参考 -90-正则表达式替换
<!DOCTYPE html>
正则表达式替换
AutoIt 的替换过程由函数 StringRegExpReplace() 完成, 函数除明确指定替换的文本字符串外, 还支持 \0 - \9 或 $0 - $9 格式使用正则表达式的捕获组内容进行替换.
替换元素和替换模式
替换是函数 StringRegExpReplace() 模式中唯一可识别的特殊构造. 与任何字符匹配的其他正则表达式语言元素(包括字符转义和句点 .)均不受支持. 同样, 替换语言元素只能在替换模式中识别, 并且在正则表达式模式中永远无效.
可以出现在 StringRegExpReplace() 函数 "替换" 参数的可识别字符是 \ 或 $ 字符, 尽管它在每个上下文中具有不同的含义. 在正则表达式模式中, $ 是与字符串的末尾匹配的定位点. 在替换模式中, $ 指示替换的开头.
对于类似于正则表达式中替换模式的功能, 使用反向引用. 有关反向引用的更多信息, 请参见反向引用构造.
使用组编号替换: $组编号 或 \组编号
$组编号 语言元素包括替换字符串中 组编号 捕获组所匹配的最后一个子字符串, 其中组编号是捕获组的索引. 例如, 替换模式 $1 指示匹配的子字符串将由捕获的第一个组替换.有关已编号的捕获组的详细信息, 请参阅正则表达式中的分组构造.
$ 后面的所有数字解释为属于组编号组. 如果这不是你想要的结果, 可改为命名组替换. 例如, 可以使用替换字符串 ${1}1 而不是 $11 来将替换字符串定义为带数字 1 的首个捕获组的值.有关详细信息, 请参阅使用命名组替换.
没有使用 (?<name>) 语法显式分配名称的捕获组从左到右进行编号(从 1 开始). 命名组也从左到右进行编号, 但以最后一个未命名组的索引大 1 的值开始. 例如, 在正则表达式 (\w)(?<digit>\d) 中, digit 命名组的索引为 2.
如果组编号不是正则表达式模式中定义的有效捕获组, $组编号将被解释为用于替换每个匹配项的文本字符序列.
下面的示例使用 $组编号 替换去除十进制值中的货币符号.它移除在货币值的开头或末尾找到的货币符号, 并识别两个最常见的小数点分隔符(“.”和“,”).
字符串: $16.32 12.19 £16.29 €18.29 €18,29
表达式: \p{Sc}(\s?\d+[.,]?\d)\p{Sc}
匹配结果(标志 3):
[0]16.32
[1] 12.19
[2]16.29
[3]18.29
[4]18,29
替换: StringRegExpReplace("$16.32 12.19 £16.29 €18.29 €18,29", '\p{Sc}(\s?\d+[.,]?\d)\p{Sc}', '$1')
替换结果(替换参数为 $1) : 16.32 12.19 16.29 18.29 18,29
表达式分析:
模式 | 子模式 | 说明 |
---|---|---|
\p{Sc} | 匹配 0 个或多个货币符号字符. | |
(\s?\d+[.,]?\d) | 匹配内容分述如下. 这是第一个捕获组. 因为替换模式为 $1, 所以将整个匹配的子字符串替换为此捕获组. | |
\s? | 匹配零个或一个空白字符. | |
d+ | 匹配一个或多个十进制数字. | |
[.,]? | 匹配 0 个或一个句点或逗号. | |
\d | 匹配0 个或多个十进制数字. | |
\p{Sc} | 匹配 0 个或多个货币符号字符. |
使用 \组编号 替换
下面的示例标识字符串中的重复单词. (?i) 选项用于确保大小写不同但其他内容都相同的单词被认为是重复的.
字符串: The the dog jumped over the fence fence
表达式: (?i)\b(\w+)\s\1\b
匹配结果(标志 4):
[0]=> [0]The the
[1]=> [0]fence fence
替换: StringRegExpReplace("The the dog jumped over the fence fence", '(?i)\b(\w+)\s\1\b', '\1')
替换结果(替换参数为 \1 ): The dog jumped over the fence
表达式分析:
模式 | 说明 |
---|---|
(?i) | 不区分大小写匹配. 确保大小写不同但其他内容都相同的单词被认为是重复的. |
\b | 在单词边界处开始匹配. |
(\w+) | 匹配一个或多个单词字符. 这是第一个捕获组. |
\s | 与空白字符匹配. |
\1 | 与第一个捕获组匹配. |
\b | 在单词边界处结束匹配. |
发表评论
木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!