第5章 正则表达式

<pre name="code" class="sql"> 下面的就是这些字符:

 | ( ) { ^ $ * + ? .


反斜杠本身是一个元字符,因此如果你要匹配一个文本的反斜杠,你要在反斜杠前面放一个反斜杠:\


反斜杠(平时正常) 的字母数字字符作用相反,它把该文本字符变成某些特殊的东西。无论什么时候你看到下面的双字符序列:


/(bar){3}/  这样将和"barbarbar"匹配  

redis01:/root/big# cat a1.pl 
$var='barbarbar11';
if ($var =~/(bar){3}/){print "11111
";};
redis01:/root/big# perl a1.pl
11111

5.2  模式匹配操作符:

m// 用于匹配一个模式 (如果把斜杠用做分隔符,你可以把m// 写成//,不用写m.)


$haystack =~ m/meedle/ # 匹配一个简单模式

$haystack =~ /needle/ # 一样的东西


redis01:/root/big# cat a2.pl 
$var='meedlexx1';
if ($var =~ m/meedle/){print "11111111
"};
if ($var =~ /meedle/){print "22222222
"};
redis01:/root/big# perl a2.pl 
11111111
22222222



每次成功匹配了一个模式(包括替换中的模式),操作符都会把变量$`, $&和$' 分配设为为匹配内容左边内容,



匹配的内容和匹配内容的右边的文本。这个功能对于把字符串分解为组件很有用:



为了有更好的颗粒度和提高效率,你可以用圆括弧捕捉你特别想分离出来的部分. 每对圆括弧捕捉与圆括弧内的模式相

匹配的子模式。圆括弧有左圆括弧的位置从左到右依次排序:对应那些子模式的子字串在匹配之后可以通过

顺序的变量$1,$2,$3 等等获得:


$`,$&,$' 和排序的变量都是全局变量,它们隐含地局部化为属于此闭合的动态范围。


它们的存在直到下一次成功的匹配或者当前范围的结尾,以先到者为准。


一旦Perl 认为你的程序的任意部分需要$`,$&或$',它就会为每次模式匹配提供这些东西。

这样做会微微减慢你的程序的速度。Perl 同样还利用类似的机制生成$1,$2 等等,

因此你也会为每个包含捕捉圆括弧的模式付出一些代价。


5.2.1  模式修饰词:


修饰词                         含义

/i                              忽略字母的大小写(大小写无关)

/s                             令.匹配换行符并且忽略不建议使用的$*变量


通常.元字符"." 匹配除了换行符以外的任何单个字符,因为它的传统含义是匹配一行内的某个字符。

不过,带有/s时,"." 元字符也可以匹配一个换行符,因为你已经告诉Perl 忽略该字符串可能包含多个换行符的情况


redis01:/root/big# cat a3.pl 
$var="abc
efg
123";
if ($var =~/abc.efg/){print "111111111
"};
if ($var =~/abc.efg/s){print "22222222
"};
redis01:/root/big# perl a3.pl 
22222222

让.号可以匹配 



/m                        令^和$匹配下一个嵌入的



5.2.2 m// 操作符(匹配)

m// 操作符搜索变量EXPR 里面的子串,查找PATTERN 。如果使用/或?做分隔符,那么开头的m是可选的。


? 表示只匹配前者一次:


5.2.3 s/// 操作符(替换)


5.2.3.1 顺便修改一下子串:



s/^s+//; # 丢弃开头的空白

s/s+$//; # 丢弃结尾的空白

s/s+/ /g; # 压缩内部的空白


5.3  元字符和元符号:



到现在你应该已经看到这样的事实,就是这些符号并不是普通的函数调用或者算术操作符,正则表达式本身就是嵌入Perl的小型语

言。
5.3.1  元字符表:





符号      原子性                       含义

...       变化                        反逃逸下一个非字母数字字符,转义下一个字母数字(可能)


...|...    否                          可选(匹配前者或者后者)

(...)      是                           分组(当作单元对待)


至于量词,我们会在它们自己的章节里详细描述,量词表示前导的原子(也就是说,单字符或者分组)应该匹配的次数,它们列在表

5-5中。

表5-5 ,正则量词:





量词                  原子性                            含义

*                      否                               匹配0或者更多次数(最大)

+                      否                               匹配或者更多次数(最大)


?                     否                               匹配1或者0次


5.3.3  通配元符号:


点号元字符常和量词一起使用。.* 匹配尽可能多的字符,而.*? 匹配尽可能少的字符。


5.4.3  Unicode 属性:





























                                    
原文地址:https://www.cnblogs.com/hzcya1995/p/13351380.html