Perl 正则表达式

什么是正则表达式?

Perl 正则表达式是用来匹配语句或语句组中的字符串模式。正则表达式主要用于文本解析、模式匹配以及基于更多需求的表达式。我们有一些运算符,它们是由正则表达式专门使用的模式绑定 =~!~,这些是测试和赋值运算符。

正则表达式运算符

[^ ]*?@[^ ]*?\.[^ ]*
  • Perl 匹配 - m/.../
  • Perl 替换 - s/.../.../
  • Perl 转写 - tr/.../.../

在进一步研究之前,我们需要了解正则表达式的一些内容,在 Perl Regex 语法中有一些像元字符,通配符这样的东西。

字符 意义
\ 特价或报价
* 匹配 0 个或更多字符
+ 匹配 1 个或更多字符
? 匹配 0 或 1 个字符
| 用来匹配不同的模式
() 用于存储匹配的模式
[] 可以传递一组字符。专门用于数字和字母。
{} 用于提供可以执行匹配的时间。
^ 字符串的开头
$ 字符串结束
\w 用于匹配单个字符或单词,可以是字母数字,包括 _
\W 匹配除字母数字以外的任何内容
\s 用于匹配空格
\S 匹配除空格以外的任何内容
\d 匹配数字。不是十进制值和负值
\D 匹配数字以外的任何内容。
\t 匹配选项卡空间
\n 匹配换行符

以上是在模式匹配时可以使用的字符集。

让我们看几个例子。

比如用户在脚本执行期间提供一些输入的情况,我们想检查用户是否输入了某个名称作为输入。我们必须编写正则表达式语法来提取名称并将它打印出来。

my $userinput="Tastones Rocks";

if($userinput=~m/.*(Tastones).*/)

{

    print "Found Pattern";

}

else

{

    print "unable to find the pattern";

}

输出:

Found Pattern

在这里,我们将正则表达式编写为 /.*(Tastones).*/.* 匹配字符串中的所有字符。. 在 Perl 正则表达式匹配中指的是包括空格在内的任何字符。

让我们看看我们如何构建一个正则表达式。

考虑一个包含多个单词和数字的字符串以及特殊符号的示例,例如 Hello every this this is my number:+ 001-99298373639;

正则表达式:/^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i

Perl 匹配运算符

匹配运算符用于匹配某些语句或变量中的字符串。

my $var="Hello this is perl";

if($var=~m/perl/)

{

    print "True"; 

} 

else

{

    print "False"; 

}

输出:

True

这段代码将打印 True,因为 Perl 模式匹配标识变量中的字符串。基本上,Perl 会在整个字符串中搜索文本,即使它在一个地方找到它也会返回 True。模式可以在变量中的任何位置。我们可以试着用 !~ 替换 =~ 来查看这两个运算符之间的区别。

Perl 替换运算符

此运算符可用于搜索和替换字符。

my $a="Hello how are you";

$a=~s/hello/cello/gi;

print $a;

输出:

cello how are you

注意:我们实际上可以使用任何模式匹配字符串,就像我们之前在替换运算符中所做的那样。这里我们用 gi,其中 g-全局,i-忽略大小写。

Perl 转写操作符

这类似于替换,但它不使用任何 Perl 正则表达式,而是我们可以直接传递我们想要替换的值或单词。

my $a="Hello how are you";

$a=~tr/hello/cello/;

print $a;

输出:

Hello cello are you