珀尔 |正则表达式中的断言
Perl 中的正则表达式(Regex 或 RE)是描述给定字符串。
正则表达式中的断言是指以某种方式可能匹配。 Perl 的正则表达式引擎从左到右评估给定字符串,搜索序列的匹配项,当我们在字符串中的给定点找到匹配序列时,该位置称为匹配位置或当前匹配位置。 Look Around Assertions 便于我们在匹配位置或当前匹配位置之前或之后匹配模式或字符串,而无需更改当前匹配位置。
断言类型:
Regex 中主要有两种类型的断言,进一步细分:
- Lookahead Assertions:在这种类型的断言中,我们向前看当前匹配位置,意味着将搜索当前匹配位置之后的字符串或字符串之后的模式/字符串,而不移动当前匹配位置。
前瞻断言的语法:
/(?=pattern)/
Lookahead Assertions 可以进一步分为:
- 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
- Negative Lookahead(?!pattern):在Negative Lookahead中,它先行模式并确保模式不存在于我们匹配的给定字符串中。为了使 Lookahead 断言为 Negative Lookahead,我们只需将 '='(Equal) 替换为 '!'(感叹号)。
例子:# 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
- Positive Lookahead(?=pattern): Positive Lookahead就像正常的 Lookahead 断言一样,它确保模式确实存在于我们匹配的给定字符串中。
- Lookbehind Assertions:在这种类型的断言中,我们在当前匹配位置后面查找,意味着将搜索当前匹配位置之前的字符串或前面的字符串,而不移动当前匹配位置。
Lookbehind 断言的语法:/(?<=pattern)/
Lookbehind Assertions 可以进一步分为:
- Positive Lookbehind(?<=pattern): Positive 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
- Negative Lookbehind(? Negative Lookbehind ,它查找模式并确保模式不存在于我们匹配的给定字符串中。为了使 Lookbehind 断言为否定,我们只需将 '='(Equal) 替换为 '!'(感叹号)。
例子:
# 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/(?
输出:
chocolate cake
- Positive Lookbehind(?<=pattern): Positive Lookbehind ,它确保模式确实存在于我们匹配的给定字符串中。