Perl正则表达式
文章目录
一、正则表达式的应用
正则表达式常有两个应用,一个是查找,一个是替换,替换的核心也是查找。
查找的一个格式:
m/……/匹配模式
替换的一个格式:
s/ ……/替换内容/匹配模式
匹配的规则写在两个斜杠之间,定义规则的字符称为元字符。
二、正则表达式之元字符
2.1 转义
\ : 反斜杠加元字符表示转义,比如 +,*,?,表示这些字符本身。
\b : 匹配单词边界
\B : 匹配非单词边界
\d : 匹配数字0—9中任意一个字符
\D: 匹配非数字
\w: 匹配包括下划线的任何单词字符
\W: 匹配包括非下划线的任何单词字符
\s: 匹配空白字符,包括空格,制表符等
\S: 匹配非空白字符
\n: 匹配换行符
\t: 匹配制表符
\x \x后接十六进制数,匹配这个数的ASCII码对应的符号
2.2 特殊匹配
^ :匹配开头
$ :匹配结尾
. :匹配除换行符外所有字符
2.3 匹配次数
* :匹配0次或多次
+ :匹配一次或多次
\?: 匹配0次或1次
2.4 各种括号 ( ),[ ],{ }
( ) :圆括号内取值,把括号里的值存在$1,$2,……$n里
[ ] :表示多选一。如[abc]匹配a或b或c。连续的字符可以简写如[a-z],[0-9]。
[ ^ ] :表示[ ]里列出的其它字符。
{n} :表示匹配n次
{n,m} : 表示匹配n到m次
| :分组,如m/bill | mike/ 表示bill 或 mike
? :当跟在*,+,?后面表示非贪婪模式。详见Perl——正则表达式之贪婪模式和非贪婪模式
perl 中$1 $2代表的含义
以数字为名的变量保存的是上一次匹配操作(/pattern/)中,第n个小括号中的原符号所匹配内容。
$1就是第一对小括号中的原符号所对应的匹配内容。
$2就是第二对小括号中的原符号所对应的匹配内容。
my $str = "<p>hello world !</p>"; #被匹配文本
if ($str =~ /<p>(.*?)<\/p>/gs)#匹配<p>...</p>,<\/p加的\代表后面的符号不进行转义
{
print "\$1 mean: $1";#$1 mean: hello world !
}
三、正则表达式的匹配模式
g: global匹配,可以匹配多次
i: 不区分大小写
m:换行匹配
e: 替换的值要先计算 s/(ab+c)/&replace($1)/e,表示查换ab+c,并把找到的结果传给replace()函数,用函数的返回值来替换。这种方法可用于复杂的查找替换。
x: 允许换行加注释,忽略空白字符
s:单行处理,这个模式下元字符可以匹配换行符
利用正则表达式的通配符设置不可用单元名称
——set tech_vars(dont_use_list) [list FRICG* DCG* SDFFX* SDFFN* SDFF4W ]
将以上BUFFER和标准单元设置成不可用。
四、Perl的绑定操作符
=~ :表示满足匹配
!~ : 表示不满足匹配
如
if($tc =~ m/^tc_/) {……}
#表示如果$tc变量以tc_开头,则执行{}里的语句。
if($tc !~ m/^tc_/) {……}
#表示如果$tc变量不是以tc_开头,则执行{}里的语句。