Perl 正则表达式中的’ee’修改器

Perl 正则表达式中的’ee’修改器

在Perl中,正则表达式可以通过使用合适的操作符对给定的字符串进行各种操作。这些操作符可以执行诸如修改字符串、替换其他子字符串等操作。使用’s'(substitution)操作符可以替换给定字符串中的一个子串,它需要两个操作数,一个是要替换的子串,另一个是替换的字符串。

s/To_be_replaced/Replacement/

Perl中的修饰符是用正则表达式来匹配一个具有特定模式的字符串。Perl中的’ee’修饰符与’/e’修饰符类似。它用于评估右侧的字符串,然后进一步评估结果。它基本上是Perl中的双 “eval “运算符。’\e’运算符用于评估右侧的字符串。’\ee’是它的下一个步骤。它将’\e’运算符应用于已经应用了’\e’的字符串上。

 s///ee;

就像’e’修饰符一样,’ee’修饰符也可以和’g'(global)修饰符一起使用,对给定字符串中所有可能的子字符串进行修改。

例子

#!/usr/bin/perl
my var = 'for';
  
# Defining the string 
myString = 'Geeks var Geeks is the best';
  
# String before using 'ee' modifier
print "Original String:String\n";
  
# Applying 'ee' modifier using regex
String =~ s/(\$\w+)/1/ee;
print "Updated String: $String";

输出。

Original String: Geeks $var Geeks is the best
Updated String: Geeks for Geeks is the best

在上面的代码中,var被打印成在对字符串应用regex之前的样子,因为它被认为是给定字符串的一个子串,没有被当作变量。但是在应用了regex之后,’ee’修饰符评估了var的值并将其打印出来。
如果我们在上面的代码中使用’e’修饰符,那么得到的字符串将与原始字符串相同。

#!/usr/bin/perl
my var = 'for';
  
# Defining the string 
myString = 'Geeks var Geeks is the best';
  
# String before using 'e' modifier
print "Original String:String\n";
  
# Applying 'e' modifier using regex
String =~ s/(\$\w+)/1/e;
print "Updated String: $String";

输出。

Original String: Geeks var Geeks is the best
Updated String: Geeksvar Geeks is the best

这是因为当使用’e’修饰符时,regex将认为RHS是被评估的字符串,它将被用作替换,这里的RHS是1美元,持有var,但不是它的值。因此,当我们使用’ee’修饰符时,它将再次评估RHS,其中包含已经评估过的值var。

在数学运算中使用’ee’修饰符

如果有一个数学表达式存储在一个字符串中,那么在打印字符串时,它的值不会被评估,而是按原样打印。这是因为它被看作是一个字符串和一个要被评估的表达式。

例子

#!/usr/bin/perl
  
# Mathematical expression
# stored as a string
String = "1 + 2";
  
# Regex to evaluate the sumString =~ s/(\d+ [+*\/-] \d+)/1/ee;
  
print "The sum isString";

输出。

The sum is 3

在上面的代码中,表达式在Regex中使用 ' \d+’操作符写一个或多个数字, [+*/-] 字符类为操作符符号,然后再次用 ' \d+’写数字。ee’修饰符对字符串进行评估,并返回表达式的总和,然后使用1美元运算符打印出来。
以上的regex也可以存储在一个子程序中,以评估各种其他表达式,而不需要重写regex。

例子

#!/usr/bin/perl
  
# Subroutine to calculate regex
sub Regex
{
    var = shift;
      
    # Regex to evaluate the sum
    var =~ s/(\d+ [+*\/-] \d+)/1/ee;
    returnvar;
}
  
# Mathematical expression
# stored as a string
String1 = "1 + 2";
  String1 = Regex(String1);
  
print "The sum isString1\n";
  
# Calculating product
String2 = "10 * 3";String2 = Regex(String2);
  
print "The product isString2";

输出。

The sum is 3
The product is 30

在上面的代码中,一个单一的regex可以使用子程序来进行四种数学运算。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程