2,选项修饰符
以/i来进行不区分大小写的模式匹配
3,以/s来匹配任意字符
默认情况下,点号(.)无法匹配换行符,这对大多数“仅在单行进行匹配”的模式来讲是说的通的。如果字符串中含有换行符,而你希望点号能匹配它们,/s修饰符可以达成这个目的。它会将模式中的每个点号转换成字符集[dD]所做的事,也就是匹配任何字符(包括换行符)。
4,用/x加上空白
加上/x修饰符之后,就可以在模式里面随意加上空白,目的是它看起来更容易阅读,理解。
/-?d+.?d*/ #可以看明白吗?
/ -? d+ .? d* /x
更详细的解释:
/
-? #一个可有可无的减号
d+ #小数点之前有一个或多个数字
.? #一个可有可无的小数点
d* #小数点之后可能会有若干个数字
/x #模式的终点
5,组合选项修饰符
在同一个样式里,如果要用到两个以上的选项修饰符,则可以将它们连续在一起使用,它们彼此的先后顺序并不会影响匹配的结果。
6,锚点
^ 标示字符串的开头
$ 标示字符串的结尾
有时候两个锚点也会一起使用,例如:/^s*$/,代表一个空白行
7,单词锚点
单词边界锚点,它所匹配的是一个单词的头尾两端。
B 非单词边界锚点,它会匹配任何不匹配的位置。因此,模式/searchB/会匹配searches,searching与searched,但不匹配search或
researching.
8, 绑定操作符=~
匹配$_只是默认的方式而已。绑定操作符=~用来告诉perl拿右边的模式来匹配左边的字符串,而非匹配$_
my $some_other = "I dream of betty rubble.";
if ($some_other = ~ /rub/) {
print "Aye,there's the rub.
";
}
9, 模式内的内插
#!/usr/bin/perl -w
my $what = "larry";
while (<>) {
if (/^($what)/) { #将模式定位在字符串的起点
print "Ww saw $what in beginning of: $_";
}
}
不管$what的内容是什么,当我们进行模式匹配的时候,该模式都会成为$what的值。在本例中,它和/^(larry)/是相同的意思,也就是在每一行的开头寻找larry.
10, 匹配变量
到目前为止,每当我们在模式里饰演圆括号的时候,都只是用来表示不同的模式组。但圆括号同时也启用了正则表达式处理引擎的记忆功能。记忆功能是指,把圆括号里的模式所时间匹配到的部分字符串暂时记下来的能力。如果有一对以上的圆括号,就会有一份以上的记忆。每一份记忆所存储的是原本的字符串,而不是模式。
因为匹配变量所存储的都是字符串,所以他们都是标量变量。在perl里,他们的命名方式像$1,$2。模式里的括号有多少对,匹配的便利多久又多少个。
$_ = "Hello there,neighbor";
if (/s(w+)./) { #记忆空白与逗号间的单词
print "the word was $1
";
}
一次记忆多个
$_ = "Hello there,neighbor";
if (/(s+) (s+),(s+)/) {
print "words ware $1 $2 $3
";
}
11, 自动匹配变量
字符串里实际匹配模式的部分会被自动存进$&
相符段落的前置字符串会存到$`
后置字符串则存到$'
12, 通用量词
模式/a{5,15}/可匹配重复5到15次的字母a
13,优先级
1,()
2, * + ? {5,15} {3,} {5}
3, ^ $ B
4, |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/312079/viewspace-245693/ ,如需转载,请注明出处,否则将追究法律责任。