使用证则表达式匹配文本
这一章的开篇几节介绍perl及如何利用perl语言结合正则表达式完成一个温度转换程序。
随着作者的步步深入,我明白了正则表达式在程序中处理数据的机理和方法。下面列出来这个温度转换程序中所用到的正则表达式的进化过程,该表达式扮演的角色就是验证用户输入的数据是否符合标准。
- 要求用户必须输入数字,程序把该数字转化成华氏温度。
表达式很简单:^[0-9]+$ - 用户可能输入负数或小数部分,继续改造表达式。
^[-+]?[0-9](/.[0-9])?$ 可有可无的输入部分用问号进行限定。 - 目前的表达式只能匹配数字,还不能甄别是华氏温度还是摄氏温度,继续改造。
^[-+]?[0-9]+(/.[0-9]*)?[ ][CF]$ - 现在的表达式能够匹配以c或f结尾的数据输入了,但是需要在程序中识别出哪部分是数字部分,哪部分是标示部分,这时需要用到分组,改造如下:
^([-+]?[0-9]+(/.[0-9]*)?)[ ]([CF])$ 经过改造后的表达式与之前在功能上没有分别,但在程序中能给出分组后每组匹配的内容,依据括号的开合位置,可用三个变量来存储每组匹配的文本分别是 $1=小数点前面内容,$2=小数点后面的浮点数据,$3=字母标示。 - 改表达式还可以继续进化,如用户输入的数据中在字母标示前有很多空格怎么办?可以让/s大显身手了。
^([-+]?[0-9]+(/.[0-9]*)?)/s*([CF])$
/s 可表示任意一个空白,包括空格,缩进,制表符,换行符,回车符。
一些有用的简记法
/t 制表符
/n 换行符
/r 回车符
/s 任何空白符
/S 非空白符
/w 相当于[a-zA-Z0-9]
/W 除/w之外的任何字符
/d 匹配数字[0-9]
/D 匹配非数字[^0-9]
使用整则表达式修改文本
( 待续)