正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。FME 也支持正则表达式,相关的 FME 转换器包括 Tester,TestFilter,StringSearcher,StringReplacer 等。FME 还提供 Regular Expression Editor,如下图所示:
这里我们就以此介绍上图中正则表达式的用法。
[abc]
表示匹配字符 a,字符 b,或字符 c。不需要 abc 是连续的。如下图:
[^abc]
与 [abc] 正好相反,表示匹配非 a,b,c 的任意字符。如下图:
[a-z]
表示匹配 a-z 的任意字符,或者通俗点说,只要包含小写字母就会匹配。如下图:
[a-zA-Z]
表示匹配 a-z 以及 A-Z 的任意字符,通俗点说,就是匹配所有的字母(含大写与小写),也可以写成 [A-Za-z],两者是等价的。
^
匹配输入字符串的开始位置。^ 字符在方括号中使用,表示不接受方括号中的字符集,如 [^abc]。
要匹配 ^ 字符本身,请使用 \^
。
$
匹配输入字符串的结尾位置。即从输入字符串的结尾搜索,看是否符合正则表达式。如果设置了 RegExp 对象的 Multiline 属性,则 $
也匹配 '\n' 或 '\r'。要匹配 $
字符本身,请使用 \$
。
上述情况中,如果正则表达式为 (string)$,那么匹配不成功。
.
匹配除换行符 \n 之外的任何单字符(含空格)。要匹配 .,请使用 \.
。
\s
匹配任何空白字符,包括空格、制表符、换页符等等。如下图,最后一个匹配项为制表符。
\S
匹配任何非空白字符。使用上图中同样的字符串,匹配结果如下(最后竖线部分为光标闪烁,并没有 | 字符):
\w
匹配任何字符(含字母、数字、下划线)。
\d
匹配任何数字。
(a|b)
指明两项之间的一个选择。要匹配 |,请使用 |。
a?
匹配前面的子表达式零次或一次。例如,do(es)? 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
a*
匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
a+
匹配前面的子表达式一次或多次。例如,zo+ 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
a{n}
n 是一个非负整数。匹配确定的 n 次。如下图:
对于 6,7,8 三种情况,其实是匹配了两次 a{3}。可以预想,对于 9:aaaaaaaaa 将匹配三次 a{3}。
a{n,}
n 是一个非负整数。表示至少匹配 n 次。如下图:
a{0,} 等价于 a*,即匹配前面的子表达式零次或多次。
a{n,m}
m 和 n 均为非负整数,其中 n <= m。最小匹配 n 次,且最多匹配 m 次。如下图:
a{3,6} 将匹配 "8:aaaaaaaa" 中的前 6 个 a。
a{0,1} 表示匹配 a 零次或一次,其实就是匹配单个字母 a,其效果 a? 是一样的,即匹配前面的子表达式零次或一次。