Perl 正则表达式中的’e’修改器
在Perl中,正则表达式可以通过使用合适的操作符对给定的字符串进行各种操作。这些操作符可以执行诸如修改字符串、替换其他子字符串等操作。使用’s'(substitution)操作符可以替换给定字符串中的一个子串,它需要两个操作数,一个是要替换的子串,另一个是替换的字符串。
s/To_be_replaced/Replacement/
此外,如果需要用一个替换字符串来替换子串,而这个字符串是一个需要评估的正则表达式,那么就使用 ‘e ‘修饰符。e “修饰符被放在替换表达式的末尾。
s/To_be_replaced/Regular_Expression/e;
‘e’修饰符也可以和’g'(global)修饰符一起使用,对给定字符串中所有可能的子字符串进行修改。
例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' FunctionString =~ 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’,它持有小写和大写字母以及所有的数字(a-z|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 modifierString =~ 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 regex中的替换操作也可以通过使用子程序来完成,以避免为每个字符串反复编写替换的冗余操作。这可以通过将regex代码放在子程序中并在需要的地方调用它来实现。
例子
#!/usr/bin/perl
# Subroutine for substitution operation
sub subroutine
{
regex = shift;
regex =~ s/Friday/Tuesday/;
return regex;
}
# Defining the string to be convertedString = "Monday Friday Wednesday";
print "Original String: String\n";
# Calling the subroutine for substitutionString =~ 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’,该子程序持有用于替换符合搜索条件的子串的regex代码。