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