基 础 函 数 参 考


StringRegExp

检查字串是否匹配指定的正则表达式.

StringRegExp ( "字符串", "表达式" [, 标志 ] [, 偏移量 ] ] )

参 数

字符串 目标字符串
表达式 用于比较的正则表达式.
标志 [可选参数] 表示函数运行方式的值. 见下表说明. 默认 0.
偏移量 [可选参数] 开始匹配的字符串位置 (起始于1). 默认为 1.


标志
0 返回 1(匹配) 或 0(不匹配)
1 返回匹配的数组.
2 返回完整匹配的数组 (Perl / PHP 结构).
3 返回全局匹配的数组.
4 返回完整匹配(Perl/ PHP 结构)和全局匹配的数组.

返 回 值

标志 = 0 :
返回 @Error 意义
2 正则表达式错误. @Extended = 正则表达式中的错误偏移量.


标志 = 1 或 2 :
返回 @Error 意义
0 有效数组. 为下一个偏移量检查 @Extended
1 数组无效. 没有匹配项目.
2 正则表达式错误, 数组无效. @Extended = 正则表达式的偏移量错误.


标志 = 3 或 4 :
返回 @Error 意义
0 有效数组.
1 数组无效. 没有匹配项目.
2 正则表达式错误, 数组无效. @Extended = 正则表达式的偏移量错误.

备 注

标志参数可以有 5 个值(0 到 4). 0 提供 true (1) 或 false (0), 表示匹配的正则表达式方案是否建立.
1 与 2 表示找到第一个匹配, 并将其返回到数组.
3 与 4 表示找到多个匹配, 并将所有匹配文本填充到数组.
2 与 4 包括第一个完全匹配的文字记录, 不仅是捕获族组, 这是标志 1 和 3 获得的.

正则表达式表示法是搜索指定字符串的轻巧方法.
正则表达式指出应该在目标字串中存在的纯文本字符串,
并给出一些特殊意义的字符, 表示允许目标字符串中的某些变化.
AutoIt 的正则表达式通常区分大小写.

正则表达式由下面所列的一个或多个简单的正则表达式说明符组成.
如果正则表达式的某字符不在下面的表中, 则该字符将只匹配自身.

重复字符 (*, +, ?, {...} ) 将尝试最大可能的匹配, 允许匹配跟随其后的字符,
除非跟随的是问号; 然后以最小模式查找后面跟随的字符.

允许嵌套的组, 但必须记住所有的组, 除非不捕获组, 在返回的数组中,
里面的表达式匹配的值在前, 而外面的表达式匹配的值在后.

完整的描述 请点击这里查看

注意: 错误的正则表达式可以产生一个无限循环而占用CPU, 甚至可以导致崩溃.

匹配说明符

[ ... ] 匹配设置的任何字符.例如: [aeiou] 匹配任何小写元音字母.
连续设置可以在开始和结束之间使用破折号. 例如: [a-z] 匹配任何小写字符.
设置中包含破折号 (-), 将其设置为第一个或最后一个字符.
在一组要包含一个右方括号, 使用作为它的第一个字符. 例如: [][] 将匹配任意 [ 或 ].
注意:特殊字符在设置内不保留他们的特有含义, 除非使用 \\, \^, \-,\[\] 匹配转义字符.
[^ ... ] 匹配任何不在指定範圍內的任意字符.
例如: [^0-9] 匹配任何非数字.
要匹配 (^) 字符本身, 请使用 (\^).
[:class:] 在字符的给定类中匹配字符. 有效类是:
  • alpha (任何字母字符)
  • alnum (任何字母数字字符)
  • lower (任何小写字母)
  • upper (任何大写字母)
  • digit (任何 0-9 十进制数字)
  • xdigit (任何十六进制数字, 0-9, A-F, a-f)
  • space (任何空白字符)
  • blank (只有一个空格或制表符)
  • print (任何可打印字符)
  • graph (除空格外的可打印字符)
  • cntrl (任何控制字符 [ascii 127 or <32]) 或 punct (任何标点字符).
    因此 [0-9] 相当于 [[:digit:]].
[^:class:] 匹配 'class' 的第一个字符, 不匹配任何字符.
( ... ) 组. 组中的元素可按序重复处理. 例如: (ab)+ 将匹配 "ab" 或 "abab", 但不匹配 "aba".
组能保存匹配的文本, 以便由函数返回的数组后向引用, 但需取决于设定的标志值.
(?#....) comment (not nestable).
(?i) 不区分大小写. 该标志对组无效. 指定正则表达式匹配时不涉及大小写.
(?-i) (默认) 区分大小写. 该标志对组无效. 指定正则表达式匹配时区分大小写.
(?: ... ) 非捕获组. 类似正常组, 但是不记录数组的匹配字符, 被匹配的文本也不会用作后向引用.
(?i: ... ) 不区分大小写的非捕获组. 类似的非捕获组. 在非捕获组内执行不区分大小写的匹配.
(?-i: ... ) 区分大小写的非捕获组. 类似的非捕获组. 在非捕获组内执行区分大小写的匹配.
(?J) allow duplicate names.
(?m) ^ 与 $ 匹配数据内的换行符.
(?s) . 匹配任何包含的换行符. (默认 "." 不匹配换行)
(?U) 反转贪婪量词.
(?x) 忽略空白区域和 # 注释.
(?-...) unset option(s).
. 匹配除换行符以外的任意字符.
| 或句点" . ", 可以匹配 | 前的字符也可以匹配 | 之后的字符.
\ 转义特殊字符 (让它匹配实际字符), 或者引用一个特殊字符类型 (见下文).
\\ 匹配一个真实的反斜杠 (\).
\a 报警字符, 即 BEL 字符 (chr(7)).
\A 只匹配字符串的开头.
\b 代表单词的开头或结尾, 也即单词的分界处.
通常英文单词由空格, 标点符号或者换行分隔, 但 \b 并不匹配这些单词分隔字符中的任何一个, 它只是匹配一个位置
\B 匹配不是单词开头或结束的位置.
\c 匹配一个控制字符, 基于下一个字符. 例如: \cM 匹配 ctrl-M.
\d 匹配数字字符 (0-9).
\D 匹配非数字字符.
\e 匹配一个转义字符 (chr(27)).
\E 结束实例修改.
\f 匹配一个换页符 (chr(12)).
\G first matching position in subject.
\h 任何水平空白字符.
\H 任何不是水平空白字符的字符.
\n 匹配换行符 (@LF, chr(10)).
\K reset start of match.
\N a character that is not a newline
\Q 引用(禁用)模式元字符, 直到 \E.
\r 匹配一个回车符 (@CR, chr(13)).
\R a newline sequence.
\s 匹配任何的空白字符: Chr(9) 到 Chr(13) 包括:
水平制表符, 换行, 垂直列表符, 换页, 回车以及标准空格 ( Chr(32) ).
\S 匹配任何的非空白符的字符.
\t 匹配一个制表符 (chr(9)).
\v 匹配任何垂直空白字符.
\V 匹配不是垂直白字符的任何字符.
\w 匹配字母: a-z, A-Z; 或数字: 0-9; 或下划线 (_); 或汉字等等
\W 匹配任意不是字母, 数字, 下划线, 汉字的字符.
\ddd 匹配八进制字符代码 ddd, 或如果成立则向后引用. 匹配之前给出确切的组号. 例如 ([:alpha:])\1 将匹配一个连字.
\xhh 十六进制字符代码 hh.
\x{hhh..} 匹配十六进制字符代码 hhh..
\z 只匹配字符串的末尾.
\Z 只匹配字符串的末尾, 或者换行之前.

重复字符

{x} 重复前一个字符, 设置或组精确 x 次.
{x,} 重复前一个字符, 设置或组至少 x 次.
{0,x} 重复前一个字符, 设置或组最多 x 次.
{x, y} 重复前一个字符, 设置或组在 x 与 y 次之间, 包含 x, y.
* 重复前一个字符, 设置或组 0 或更多次. 等价于 {0,}
+ 重复前一个字符, 设置或组 1 或更多次. 等价于 {1,}
? 重复前一字符, 设置或组可能会或可能不会出现. 等价于 {0, 1}
? (重复字符后) 查找最少的匹配而非最多的.

字符类别

[:alnum:] 字母和数字
[:alpha:] 字母
[:ascii:] 字符代码 0 - 127
[:blank:] 空格或制表符
[:cntrl:] 控制字符
[:digit:] 十进制数字 (相同于 \d)
[:graph:] 打印字符, 不包括空格
[:lower:] 小写字母
[:print:] 打印字符, 包括空格
[:punct:] 打印字符,不包括字母和数字
[:space:] 空白空间 (不完全和 \s 相同, 它包括 VT: chr(11) )
[:upper:] 大写字母
[:word:] "单词" 字符 (相同于 \w)
[:xdigit:] 十六进制数

关于 UTF-8 模式的一般注释 (使用 AutoIt 的内部转换模式):

    1. 一个 unbraced 十六进制转义序列 (例如 \xb3) 匹配一个两字节的 UTF-8 字符(如果该值大于 127).

    2. 八进制数测试高达 \777, 匹配值大于 \177 的两字节 UTF-8 字符.

    3. 重复量词适用于完整的 UTF-8 字符, 而不是单个字节, 例如: \x{100}{3}.

    4. (句)点元字符匹配一个 UTF-8 字符, 而不是单字节.

    5. 字符转义 \b, \B, \d, \D, \s, \S, \w, 与 \W 正确测试任何代码值的字符,
但 PCRE 字符作为数字, 空格, 或"字"字符仍然和以前一样设置, 所有的值小于 256.
请注意, 这也适用于 \b, 因为它被定义在 \w 与 \W 条件中.

    6. 同样, 符合 POSIX 命名字符类的是所有低位值的字符.

    7. 然而 Perl 5.10 水平和垂直空白匹配转义 (\h, \H, \v, 与 \V) 符合所有相应的 Unicode 字符.

    8. 不区分大小写的匹配只适用于字符值小于 128.
PCRE 支持不区分大小写的匹配仅适用于字符有(one-to-one)一对一的映射时.
PCRE 不支持 Unicode 的 (many-to-one)多对一映射部分.

相 关 函 数

StringInStr, StringRegExpReplace

函 数 示 例


; ***********************************
; 以下为官方示例:
; ***********************************

;选项 1, 使用偏移量
Local $nOffset = 1

Local $array
While 1
    $array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 1, $nOffset)

    If @error = 0 Then
        $nOffset = @extended
    Else
        ExitLoop
    EndIf
    For $i = 0 To UBound($array) - 1
        MsgBox(0, "正则表达式选项 1 测试 " & $i, $array[$i])
    Next
WEnd


;选项 2, 单返回, php/preg_match() 样式
$array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 2)
For $i = 0 To UBound($array) - 1
    MsgBox(0, "正则表达式选项 2 测试 " & $i, $array[$i])
Next


;选项 3, 全程返回, 旧的 AutoIt 样式
$array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 3)

For $i = 0 To UBound($array) - 1
    MsgBox(0, "正则表达式选项 3 测试 " & $i, $array[$i])
Next


;选项 4, 全程返回, php/preg_match_all() 样式
$array = StringRegExp('F1oF2oF3o', '(F.o)*?', 4)

For $i = 0 To UBound($array) - 1

    Local $match = $array[$i]
    For $j = 0 To UBound($match) - 1
        MsgBox(0, "正则表达式选项 4 测试 " & $i & ',' & $j, $match[$j])
    Next
Next

provider with jb51.net (unicode)