正则表达式(二)扩展应用(结合perl语言)

标签: 正则  perl

Perl语言的正则表达式功能非常强大,基本上是常用语言中最强大的,很多语言设计正则式支持的时候都参考Perl的正则表达式。以下面一个例子入门:perl实现匹配一个标量是否是数字。

#!/usr/bin/perl

$rely = <STDIN>; #键盘输入
if($rely =~ m/^[0-9]+$/){
   print("is digits");
}else{
   print("not is digits");
}
  • m/……/中间省略号放入正则表达式。
  • m代表尝试用正则表达式匹配。
  • =~用来连接要匹配的字符串以及正则表达式。

perl会保存括号内的子表达式实际匹配的文本,Perl通过变量1,2,$3等等,分别指向第一组、第二组、第三组括号内的子表达式实际匹配的文本。正则表达式匹配成功一次,Perl就会设置一次。

例如:以下两种写法,并不会影响匹配结果,但是却会影响到子表达式的值。

这里写图片描述

这里写图片描述

摄氏温度和华氏温度的转换(对于上面保存子表达式的应用)

#!/usr/bin/perl

$input = <STDIN>; #接收用户输入的一行文本
chomp($input); #去掉文本末尾的换行符

if($input =~ m/^([-+]?[0-9]+)([CF])$/){

   #如果已经匹配。$1保存数字,$2保存"C"或者"F"
   $InputNum = $1; 
   $type     = $2;

   if($type eq "C"){
        #如果输入摄氏温度,则计算华氏温度
    $celsius = $InputNum;
    $fahrenheit = $celsius;#($celsius * 9 / 5) + 32;
   }else{
    #计算摄氏温度
    $fahrenheit = $InputNum;
    $celsius = ($fahrenheit - 32) * 5 / 9;
   }

   printf "%.2f C is %.2f F\n",$celsius, $fahrenheit;

}else{
   print("error.");
}

运行结果:
这里写图片描述

如果将程序中的正则匹配条件加上浮点数,则12、$3就分别代表了别的意思。

这里写图片描述

Perl语言自身的元字符

此部分提到的是Perl语言的元字符,而不是正则表达式的元字符。

这里写图片描述

Perl语言实现表达式替换

$var =~ s/regex/replacement/ //意思是将能够匹配正则表达regex的字符串都替换为replacement。

这里写图片描述

原文链接:加载失败,请重新获取