Perl Regex中的断言

Perl Regex中的断言

Perl中的正则表达式(Regex或RE)是指在给定的字符串中描述一个序列或搜索模式的特殊字符串。
正则表达式中的断言是指在某种程度上有可能匹配。Perl的regex引擎从左到右评估给定的字符串,搜索序列的匹配,当我们在字符串的某一点找到匹配序列时,这个位置被称为匹配位置或当前匹配位置。环视断言有助于我们在不改变当前匹配位置的情况下,在匹配位置或当前匹配位置之前或之后匹配一个模式或一个字符串。

断言的类型:

在Regex中主要有两种断言类型,它们被进一步分为:

Perl  Regex中的断言

  1. 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
  1. 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程