Perl Regex中的断言
Perl中的正则表达式(Regex或RE)是指在给定的字符串中描述一个序列或搜索模式的特殊字符串。
正则表达式中的断言是指在某种程度上有可能匹配。Perl的regex引擎从左到右评估给定的字符串,搜索序列的匹配,当我们在字符串的某一点找到匹配序列时,这个位置被称为匹配位置或当前匹配位置。环视断言有助于我们在不改变当前匹配位置的情况下,在匹配位置或当前匹配位置之前或之后匹配一个模式或一个字符串。
断言的类型:
在Regex中主要有两种断言类型,它们被进一步分为:
- Lookahead断言:在这种类型的断言中,我们领先当前的匹配位置,意味着将搜索当前匹配位置之后的字符串或模式/字符串的继承字符串,而不移动当前匹配位置。
Lookahead断言语法:
/(?=pattern)/
Lookahead断言可以进一步划分为。
- Positive Lookahead(?=pattern):Positive Lookahead就像普通的Lookahead断言一样,它确保模式确实存在于我们要匹配的给定字符串中。
示例:
# Perl code for demonstrating
# Positive Lookahead Modules used
use strict;
use warnings;
_ = "chicken cake";
# It will check that if the cake is
# in the string, then
# replace the chicken with chocolate
s/chicken (?=cake)/chocolate /;
# printing the result
print_;
输出:
chocolate cake
- 负数Lookahead(?!pattern):在负数Lookahead中,它对模式进行Lookahead,并确保该模式**不存在于我们要匹配的给定字符串中。为了使Lookahead断言成为负Lookahead,我们只需将’=’(等价)替换为’!’(感叹号)
示例:
# Perl code for demonstrating
# Negative Lookahead Modules used
use strict;
use warnings;
_ = "chicken cake";
# it will check that if the curry is not
# in the given string, then
# replace the chicken with chocolate
s/chicken (?!curry)/chocolate /;
# printing the result
print_;
输出:
chocolate cake
- Lookbehind 断言: 在这种类型的断言中,我们查看当前匹配位置的后面,意味着将搜索当前匹配位置之前的字符串或之前的字符串,而不移动当前匹配位置。
Lookbehind 断言语法:
/(?<=pattern)/
Lookbehind断言可以进一步分类。
- 正向的Lookbehind(?<=pattern)。正向的Lookbehind,它确保模式确实存在于我们要匹配的给定字符串中。
示例:
# Perl code for demonstrating
# Positive Lookbehind Modules used
use strict;
use warnings;
_= "chocolate curry";
# it will check that if the chocolate
# is preceding curry, then
# it will replace the curry with cake
s/(?<=chocolate )curry/cake /;
# printing the result
print_;
输出:
chocolate cake
- 负向查找(?<! pattern)。 负向查找,它查找模式并确保模式**不存在于我们要匹配的字符串中。为了使Lookbehind断言成为否定的,我们只需将’='(Equal)替换为’!'(Exclamation)。
示例:
# Perl code for demonstrating
# Negative Lookbehind Modules used
use strict;
use warnings;
_= "chocolate curry";
# it will check that if the chicken
# is not preceding curry, then
# it will replace the curry with cake
s/(?<!chicken )curry/cake /;
# printing the result
print_;
输出:
chocolate cake