特殊字符
. * + ? [ ^ $ \
例如:
(string-match "^abc.e*?[0-9]$" "abcdefg6") => t
特殊字符区间
在 [
到之后第二个字符之后或第三个(第二个如果是 ^
) 之后的]
之间的部分,叫做字符集(characters class).
`[[a]` 匹配 `[` 或 `a`
在 [: 到 :] 之间的字符集。这个和 Perl 相同
和 Perl Regexp Expression 的区别:
如果学过 Perl 的正则表达式,许多概念是相同的,就不介绍了,就说说不同的地方:
-
分支结构是用
\|
,而不是|
,也就是说|
不是一个特殊字符,转义之后才是。 -
表示匹配数量的区间的分界符也需要转义:
\{3,4\}
,所以,{
也不是特殊字符。 -
括号也不是特殊字符,对于分组的括号要进行转义;
(string-match "(\w+)::\1" "abc:def") => t
-
非捕获型括号的定义
\(?:...\)
-
强制分组名称 `(?:digit...)
可以连续定义相同的分组,最后返回最后捕获的一个分组
\(?:2\w+\)::\(?:2\w+\)
-
\` == \A 匹配文本的开始
-
' == \z 匹配文本的结束
正则表达式虽然广泛用于许多地方,但标准总有写差别。唉,学了一个学一个。。