learning perl :
1 : perl里面 的 花括号是不能省略的:
- $_ = "fred gahdaj_ barney";
- if (/fred \w+ barney/)
- print "it matched!\n";
报错:syntax error at ./perl line 5, near ") print"
正确的是:
- $_ = "fred gaggdt_ barney";
- if (/fred \w+ barney/){
- print "it matched";
- }
关于可选量词的误解: 注意: 量词 . + ? * 等都是与前一个字符一起来进行理解;
例如/you_?me/则匹配 you_me youme ;
/you_+me/则匹配 you_me you___me 等;
/you*me/则匹配
yome 等等;
?:匹配前一个字符出现或者不出现;(包括已出现的字符的次数而不是这个字符另外出现的次数)
+ :匹配前一个字符出现一次及以上;(包括这个已出现的字符的次数,而不是这个字符另外出现的次 数)
* :出现任意次数;
The 6th chapter
the regular Expressions
正则表达式在 perl里叫做: 模式
模式分组:() ;(通过使用括号进行模式分组;)
The 7th chapter
Matching with the regular Expressions
1 m/ / 模式匹配形式
通常的/ /是其的特殊情况的简写。
可以使用随意的定界符;这点与qw//一样。(如果你采用/作为定界符,你可以省略m,直接写为// 即ok)
2 可选修饰符(开关)
通常跟随在模式(正则表达式)后面用于改变模式的默认的行为。
如/i:大小写无关的匹配
/yes/i
/s用来匹配任意字符,主要用来进行对.进行 包括 换行符的匹配(匹配一行中包括的换行符!);
/x用于任意加上空白字符(则原来的空白与制表符都失去了含义)
3
锚位: ^ 和 $ 用于 句首和句尾的 匹配;
单词边界锚位: \b;非但次边界锚位: \B (单词边界锚位非常有用!)
4 绑定操作符: =~
5 模式(正则表达式)串中的内插;
6 捕获变量
7 通用量词:{m,n}
8 优先级
9 模式测试程序:
- #!/usr.bin/perl -w
- use 5.010;
- while (<>){
- chomp;
- if (/YOUR PATTERN HERE/){
- print "Matched: $`<$&>$'";
- }else{
- print "no match!\n";
- }
- }
这个测试模式段给我我们一个很好的改写的基础模版。。。
- #!/usr/bin/perl -w
- use 5.010;
- while (<>){
- chomp;
- if (
- (\b\w+a\b)
- (.{0,5})
- !xs){
- print "The 1st is $1;\n
- The 2nd is $2;\n ";
- }
- }
这是习题的答案:
1 .{0,5} :点号 代表的是连接的意思??不是的,显然那点号在 模式集 中代表的任意的一个字符
(当然\n除外),后面{0,5}代表的是通用量词。。
2 注意这里我们采用了 m! !作为模式,并且采用了!作为 模式分界符。。
3 xs代表的是 组合选项可选修饰符;x 代表 忽略空白,s代表 匹配任意字符(.本来是无法匹配
换行的,但是再加s 可选修饰符后则可以匹配 换行。)
4 注意我们使用了$1和$2进行捕获变量的引用操作。
自己本来犯了一个错吴:
if (m!
(\b\w+a\b)
(.{0,5})
!xs){
print "the 1st is ‘g{1}’;\n the 2nd is ‘g{2}’";
}
则结果为 :The 1st memory is 'g{1}';
我们所说的
反向引用必须是在 模式中使用的;
例如:模式如下:
m!
(\b\w+a\b)
(.{0,5})
g{1}
!xs
阅读(1690) | 评论(0) | 转发(0) |