📜  珀尔 |正则表达式中的“e”修饰符

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

珀尔 |正则表达式中的“e”修饰符

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

s/To_be_replaced/Replacement/

此外,如果需要用作为要评估的正则表达式的替换字符串替换子字符串,则使用“ e ”修饰符。 'e' 修饰符放置在替换表达式的末尾。

s/To_be_replaced/Regular_Expression/e;

'e' 修饰符也可以与 'g'(全局)修饰符一起使用,以对给定字符串中所有可能的子字符串进行更改。

示例 1:使用字符类进行替换

#!/usr/bin/perl
  
# Defining the string to be converted
$String = "Geeks for Geeks is the best";
print "Original String: $String\n";
  
# Converting the string to UPPERCASE
# using 'uc' Function
$String =~ s/(\w+)/uc($1)/ge;
print"Uppercased String: $String\n";
  
# Converting the string to lowercase
# using 'lc' Function
$String =~ s/(\w+)/lc($1)/ge;
print"Lowercased String: $String\n";
输出:
Original String: Geeks for Geeks is the best
Uppercased String: GEEKS FOR GEEKS IS THE BEST
Lowercased String: geeks for geeks is the best

上面的代码使用了一个字符类'\w',它包含小写和大写字母以及所有数字(az|A_Z|0-9)。这用于对整个字符串执行单个替换操作。

示例 2:使用单个字符或单词进行特定替换

#!/usr/bin/perl
  
# Defining the string to be converted
$String = "Geeks for Geeks is the best";
print "Original String: $String\n";
  
# Converting a single character using e modifier
$String =~ s/(e)/uc($1)/ge;
print"Updated String: $String\n";
  
# Converting a word using e modifier
$String =~ s/(for)/uc($1)/ge;
print"Updated String: $String\n";
输出:
Original String: Geeks for Geeks is the best
Updated String: GEEks for GEEks is thE bEst
Updated String: GEEks FOR GEEks is thE bEst

在上面的代码中,可以看到更新后的字符串即使在对其进行第二次递归之后也不会恢复到原来的版本。

使用子程序进行替换操作:
Perl 正则表达式中的替换操作也可以使用子例程来完成,以避免为每个字符串一次又一次地编写替换正则表达式的冗余。这可以通过将正则表达式代码放在子例程中并在需要的地方调用它来完成。

例子:

#!/usr/bin/perl
  
# Subroutine for substitution operation
sub subroutine
{
    $regex = shift;
    $regex =~ s/Friday/Tuesday/;
    return $regex;
}
  
# Defining the string to be converted
$String = "Monday Friday Wednesday";
print "Original String: $String\n";
  
# Calling the subroutine for substitution
$String =~ s/(\w+)/subroutine($1)/ge;
print"Updated String: $String\n";
  
  
# Defining a new String to be converted
$String2 = "Today is Friday";
print "\nOriginal String: $String2\n";
  
# Calling the subroutine for substitution
$String2 =~ s/(\w+)/subroutine($1)/ge;
print"Updated String: $String2\n";
输出:
Original String: Monday Friday Wednesday
Updated String: Monday Tuesday Wednesday

Original String: Today is Friday
Updated String: Today is Tuesday

在上面的代码中,当替换操作开始时,它调用子例程“change_substitution”,其中包含用于替换匹配搜索的子字符串的正则表达式代码。