正则表达式是Perl内嵌的一个微型编程语言
使用简单模式
匹配对象是$_内容,那模式本身就是一串简单的字符串序列,把模式写在/中.
$_ = "asda";
if(/asad/)
{...}
Unicode属性
Unicode每个字符除了字节组合外,还有属性信息,除了匹配字符本身,还可根据字符属性来匹配。若要匹配某项属性,只需把属性名放入\p{PROPERTY},例如:
if(/\p{Space}/)
{...}
匹配空白符。
if(/\p{Digit}/)
{...}
匹配数字
将p改为大写表示不匹配
if(/\P{Space}/)
{...}
不匹配空白符
元字符
.可以匹配除了换行符之外任意字符。如果想只是匹配.本身,要加上反斜线转义。
简单量词
- *能匹配前一个字符零次或者无数次。
例如
"fred\t*ban"
那么能匹配在fred和ban之间包含0次或者无数次制表符的字符串。
.*能匹配任意字符0次到无限次
-
+匹配前一个条目一次以上。
-
?匹配前一个条目只出现一次或者不出现
模式分组
- ()的作用是对字符串分组,使多个条目合并为一个条目。
/fred+/
#可以匹配freddddd
/(fred)+/
#可以匹配fredfredfred
/(fred)*/
#可以匹配hello,world
捕获组
通过反向引用来引用圆括号中的模式所匹配的文字。反向引用是在反斜线后面接上数字编号
if(/(.)\1/)
{...}
#匹配连续重复出现的两个字符"aa"
if(/y(....)d\2/)
{...}
#匹配yabccdabccabcc
在Perl5.10后可用\g{N}表示新的反向引用写法。N表示要反向引用的组号。
if(/(.)\g{1}/)
{...}
择一匹配
| 的意思是匹配左边的内容失败了可以匹配右边的内容
/fred(|\t)+barney/
#(|\t)可能匹配空格或者制表符
这就可以匹配两个名字之间至少要有一个空格或制表符
字符集
指一组可能出现的字符,通常写在([])表示匹配字符集中出现的单个字符。
[a-zA-Z]
字符集的简写
表示任意一个数字的字符集简写是\d
/[/d]/
表示任意一个空白符的字符集是\s
/[\s]/ == /[\f\t\n\r]/
\h只匹配水平空白符,\v只匹配垂直空白符
\w匹配单词字符
反义简写
[^\d] == \D
#表示否定意义
网友评论