perl学习记录之正则表达式学习记录
模式中引入了不少特殊字符,叫做元字符,在正则表达式中表达特殊的含义。
1、(.) 点号是任何单字符的匹配符,除了换行符(\n)。
2、在任何元字符面前加上反斜线,就会使它失去元字符的特殊作用。
3、量词:星号(*)正是用来匹配前面内容零次或者多次的。
加号(+)是匹配前面内容一次以上的。
问号(?)匹配前面内容可有可无,有的话匹配出现一次。
通用量词{},如果上面三个量词都不需要,还可以在花括号里指定重复次数的范围。
4、模式分组:圆括号()。圆括号也是元字符。\1 ,\2的写法就是在使用反响引用。
Perl5.10有一种新的反向引用写法\g{N},其中N是反向引用的组号。
5、择一匹配(|)。
6、字符集,字符集是指一串可能出现的字符集合,通过写在方括号[]内来表示。但它只匹配单个字符,但可以是字符集里列出的任何一个。在方括号[]中用的比较多的是连字符(-)。在方括号[]以外连字符只是普通字符。
也可以在字符集内部开头的地方加上脱字符(^),表示这些字符除外。也就是说[^abc]会匹配除a、b、c以外的任何字符。
7、\d 代表任意数字的字符集[0-9],\w代表单词字符字符集[A-Za-z0-9_]。
8、\s简写擅长处理空白,相当于[\f\t\n\r ],包含5中空白的字符集:换页,制表,换行,回车以及空格。
9、\D相当于[^\d],\W相当于[^\w],\S相当于[^\s]。
10、可选修饰符:
使用/i修饰符时,可以让你在进行模式匹配时不区分大小写。例如/yes/i 可以匹配yes YES等。
使用/s修饰符时,可以让模式中的(.)点号相当于[\d\D],能够匹配换行符。
使用/x修饰符能够在模式里面随意加上空白,目的是使他更容易阅读,理解。
当然这些可选修饰符可以组合使用。也当然有很多其他的选项,这里不一一介绍了。
11、锚位,默认情况下,模式匹配的过程开始于待匹配字符串的开头,如果不相符就一直往字符串后面浮动,看其他位置是否能匹配。但是加入一些锚位,可以让模式直接匹配字符串的某处。脱字符(^)是一个锚位,用来表示字符串的开头,美元符号($)也是一个锚位,用来表示字符串的结尾。
单词锚位,锚位并不局限于字符串的首尾。比如\b是单词边界锚位。\B是非单词边界锚位。
12、在perl中,默认情况下模式匹配的对象是$_,绑定操作符=~则能让Perl拿右边的模式来匹配左边的字符串,而非匹配$_。
例如if($some_other=~/perl/){}
13、捕获变量,圆括号同时同时也启动了正则表达式处理引擎的捕获功能。捕获功能是指把(圆括号中模式所匹配的)部分字符串暂时记下来的能力。每个被捕获的是原本的字符串,而不是模式。被捕获的字符串存储在标量变量中,他们的名字类似$1或者$2,$2的意思就是第2对括号捕获的字符串。
14、针对第13条,如果不做处理,圆括号都会捕捉部分的匹配串到捕获变量$1,$2中等,但有时侯需要关闭这个功能。在左括号的后面加上问号和冒号(?:),以告知Perl这一对括号完全是为了分组而存在的。
15、命名捕捉,即我们可以把我们捕捉的字符串存能够用我们自己命名的LABLE来表示,而不再用$1,$2等来表示。为捕获串加标签的方法是使用(?<LABEL>PATTERN)这样的方式,而使用捕获的字符串时则用$+{LABEL}这样的形式来表示。
16、元字符的优先级次序
圆括号 量词 锚位和序列 择一 元素