au3 正则参考 -01-工作方式
<!DOCTYPE html>
正则表达式的工作方式
正则表达式提供了功能强大, 灵活而又高效的方法来处理文本. 正则表达式的全面模式匹配表示法使你可以快速分析大量文本以找到特定的字符模式:
验证文本以确保它匹配预定义的模式(如电子邮件地址);
提取, 编辑, 替换或删除文本子字符串;
将提取的字符串添加到集合以生成报告.
对于处理字符串或分析大文本块的许多应用程序而言, 正则表达式是不可缺少的工具.
使用正则表达式处理文本的中心构件是正则表达式引擎, 处理文本至少要求向该正则表达式引擎提供以下两方面的信息:
1. 提供正则表达式识别文本的模式. 正则表达式模式用特殊的语法或语言定义, 该语法或语言与 Perl 5 正则表达式兼容.
2. 提供正则表达式分析文本的模式.
正则表达式可以执行以下操作:
确定输入文本中是否具有匹配正则表达式模式的字符串
匹配正则表达式模式的一个或所有文本匹配项. 返回提供有关匹配文本的信息. 收集匹配对象.
通过调用 StringRegExpReplace() 替换匹配正则表达式模式的文本.
正则表达式示例
示例 1: 替换子字符串
假设一个邮件列表包含一些姓名, 这些姓名有时包括称谓(Mr., Mrs., Miss 或 Ms.) 以及姓氏和名字. 如果你从列表中生成信封标签时不希望包括称谓, 则可以使用正则表达式移除称谓, 如以下示例所示.
字符串: Mr. Henry Hunt, Ms. Sara Samuels, Abraham Adams, Ms. Nicole Norris
表达式: Mr\.? |Mrs\.? |Miss |Ms\.?
表达式模式可匹配任何 “Mr”, “Mr.”, “Mrs”, “Mrs.”, “Miss”, “Ms” 或 “Ms.”
从原始字符串中移除匹配项:
StringRegExpReplace("Mr. Henry Hunt, Ms. Sara Samuels, Abraham Adams, Ms. Nicole Norris", "Mr\.? |Mrs\.? |Miss |Ms\.?", "")
替换结果: Henry Hunt, Sara Samuels, Abraham Adams, Nicole Norris
示例 2: 标识重复的单词
意外地重复单词是编写器常犯的错误. 可以使用正则表达式标识重复的单词, 如以下示例所示.
字符串: This this is a nice day. What about this? This tastes good. I saw a a dog.
表达式: (?i)\b(\w+?)\s\1\b
匹配结果(标志 4):
[0]=> [0]This this
[0]=> [1]This ; 匹配开始位置 0
[1]=> [0]a a ; 匹配开始位置 66
[1]=> [1]a
表达式分析:
模式 | 说明 |
---|---|
(?i) | 启动不区分大小写的匹配 |
\b | 在单词边界处开始 |
(\w+?) | 匹配一个或多个单词字符, 但字符要尽可能的少. 它们一起构成称为 \1 的捕获组 |
\s | 与空白字符匹配 |
\1 | 与等于名为 \1 捕获组的子字符串匹配 |
\b | 在单词边界处结束 |
此示例将子字符串“This this” , "a a" 标识为重复, 但如果子字符串 “this?This” 由于插入标点符号, 该子字符串不被标识为重复.
示例 3: 匹配货币符号
字符串:
Office expenses on 2/13/2008:
Paper (500 sheets) $3.95
Pencils (box of 10) $1.00
Pens (box of 10) $4.49
Erasers $2.19
Ink jet printer $69.95
Total Expenses $ 81.58
表达式: \$\s*[-+]?([0-9]{0,3}(,[0-9]{3})*(\.[0-9]+)?)
匹配结果(标志 4):
[0]=> [0]$3.95
[1]=> [0]$1.00
[2]=> [0]$4.49
[3]=> [0]$2.19
[4]=> [0]$69.95
[5]=> [0]$ 81.58
此正则表达式模式可以按以下方式解释:
模式 | 子模式1 | 子模式2 | |
---|---|---|---|
\$ | 查找美元符号 $ . $ 前面包含一个反斜杠指示按字面解释美元符号, 而非将其作为正则表达式定位点. (单独的 $ 符号将指示正则表达式引擎应尝试在字符串的末尾开始匹配.) |
||
\s* | 查找空白字符的 0 个或多个匹配项. | ||
[-+]? | 查找正号或负号的 0 个或一个匹配项. | ||
([0-9]{0,3}(,[0-9]{3})*(\.[0-9]+)?) | 圆括号将表达式定义为捕获组. 如果找到匹配项, 则有关匹配字符串的此部分信息可以从第二个捕获组对象中检索 (集合中的第一个元素表示整个匹配.). 查找对象分述如下: |
||
([0-9]{0,3}(,[0-9]{3})* | 查找对象分述如下: | ||
[0-9]{0,3} | 查找十进制数字 0 到 9 的零到三个匹配项 | ||
(,[0-9]{3}* | 查找后跟三个十进制数字的组分隔符的零个或多个匹配项 | ||
(\.[0-9]+)? | 查找对象分述如下: | ||
\. | 转义句点字符为原意文本字符. 匹配小数分隔符(小数点) | ||
[0-9]+)? | 查找上项匹配值(小数点)后跟 1 或 多个十进制数字的 0 个或 1 个匹配项 |
发表评论
木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!