一、Non-Capturing
这个Non-Capturing的确不知道该如何翻译(非捕获?),但意思是明白了。用圆括号括起来的部分可以被捕获到$1、$2……中,但如果起始圆括号后面紧跟一个问号和冒号,就表示本组不需要被捕获到$1、$2……中。
例如,下列正则表达式中
^([-+]?/d+(/./d*)?)([CF])$- 第1个被捕获的组:从第一个左圆括号,到与该左圆括号配对的右括号,被存储到$1中(整数+小数点+小数部分)
- 第2个被捕获的组:从第二个左圆括号,到与该左圆括号配对的右括号,被存储到$2中(小数点+小数部分)
- 第3个被捕获的组:从第三个左圆括号,到与该左圆括号配对的右括号,被存储到$3中(C或F)
如果是下面的正则表达式:
^([-+]?/d+(?:/./d*)?)([CF])$注意红色的部分,有了这个就表示本组不要捕获,这样,$2中存储的就是([CF])这一组,没有$3了。
二、字符转义
- /bTAB字符(ASCII码9)
- /n换行符(ASCII码10)
- /r回车符(ASCII码13)
- /s所有能代表“空白”的字符(包括空格、制表、换行等)
- /S所有不是/s的字符
- /w大小写字母、数字和下划线,与[a-zA-Z0-9_]等价
- /W所有不是/w的字符,与[^a-zA-Z0-9_]等价
- /d数字,与[0-9]等价
- /D所有非数字字符,与[^0-9]等价
三、文本替换
先前知道了m的作用(匹配),把m换成s就成了“替换”,另外,好友告诉我有了m,就可以用任何一对符号来括住正则表达式,不必老是用/,说不定s也一样。
$name =~ s//bSaddam/b/Bush/;
这句表示:把$name里面存储的内容,凡是匹配到单词边界的Saddam,通通替换为Bush。
四、Perl的一些语法
while ($var = <>) {
}
这个“$var=<>”看起来有点古怪,其实就是“var = getline()”,也就是说,从输入流中取下一行的内容,并赋值变量中,如果输入流已结束,则变量值未定义,同时整个赋值表达式返回布尔假。
关键字last,与C里面的continue类似。
函数defined($var)测试一个变量里是否含有值,是则返回true,否则返回false。