📜  珀尔 |正则表达式中的断言

📅  最后修改于: 2022-05-13 01:54:57.839000             🧑  作者: Mango

珀尔 |正则表达式中的断言

Perl 中的正则表达式(Regex 或 RE)是描述给定字符串。
正则表达式中的断言是指以某种方式可能匹配。 Perl 的正则表达式引擎从左到右评估给定字符串,搜索序列的匹配项,当我们在字符串中的给定点找到匹配序列时,该位置称为匹配位置当前匹配位置。 Look Around Assertions 便于我们在匹配位置当前匹配位置之前或之后匹配模式或字符串,而无需更改当前匹配位置

断言类型:
Regex 中主要有两种类型的断言,进一步细分:
断言的类型

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

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