👉通过perl来介绍正则表达式。
快速入门
先写一个最简单的正则表达式,查到是否有匹配的字符串,如下:
$_ = "little verifier";
if(/little/){ # 查找 little 字符
print "find it!\n";
}else{
print "cannot find it!\n";
}
如上,我们可以用 / 斜杠符号作为开始匹配正则。用/ … /的方式,在其中写正则表达式。其实/ … / 的方式是 m 匹配的简写,你可以用m{ }
、m( )
、m< >
、m/ /
的方式都可以。比如要匹配 http://,你可以用/ http\/\//
的方式去匹配,但是太难看了,也可以用m%http://%
或者m{http://}
等方式,这时候/
就不需要用\
去转义了。
1. 通配符及量词
.
是一个通配符,通常会和量词*
、+
和 ?
连用,总结如下:
符号 | 描述 | 例子 |
---|---|---|
. | 匹配任意一个字符,但不包括 \n 换行。 | /litt.e/ # 可以匹配到 little |
.* | 匹配0个或多个任意字符 | /litt.*le/ # 可以匹配到 little /li.*e/ # 可以匹配到 little |
.+ | 匹配一个以上任意字符,但至少匹配一个字符 | /litt.+le/ # 匹配不到 little /li.+e/ #可以匹配到 little |
.? | 匹配一个或0个字符,即有或者没有都行 | /litt.?le/ # 匹配不到 little /litt.?e/ # 可以匹配到 little |
t* 或t+ 或t? | t* 匹配任意多个字符 t ;t+ 匹配至少一个字符t ;t? 匹配0个或一个字符t ;类似的如 :n?(0个或一个字符n)、c*(任意多个字符 c)、d+(一个以上字符 d)。 | /lit+le/ # 可以匹配到 little /li.+e/ #可以匹配到 little |
(tb)* 或(tb)+ 或(tb)? | (tb)* 匹配任意多个字符 tb ;(tb)+ 匹配至少一个字符 tb ;(tb)? 匹配0个或一个字符 tb ; |
2. 常用的简写
符号 | 描述 |
---|---|
(.) | 模式分组 |
a|b | 择一选择,要么匹配a,要么匹配b ; |
[abc] | 字符集,匹配a、b、c 中的任一个字符 |
简写字符包括如下:
符号 | 描述 |
---|---|
\d | 十进制数字 |
\D | 非十进制数字 |
\s | 空白字符 |
\S | 非空字符 |
[\d\D] | 匹配和一个字符,可以是\n换行符(区别于. 的地方) |
3.锚位
符号 | 描述 | 例子 |
---|---|---|
^ | 匹配开头 | |
$ | 匹配结尾 | |
\b | 匹配单独的单词 | /\bsub\b/ # 不能匹配subfunction |
4.模式匹配修饰符
写在正则表达式的后面,如linux命令行一样,多个参数可以同时加,如xi
符号 | 描述 | 例子 |
---|---|---|
x | 忽略正则表达式中的空格 | / \s abc \d /x |
i | 忽略匹配时的大小写 | / \s aBc \d /xi |
s | 匹配任意字符,包括换行符\n |
未完待续…