如何将子字符串替换为小写以进行全局搜索

how to replace substring into lowercase for global search

我正在尝试使用“s/substring/replacement/”将子字符串替换为允许全局搜索和不区分大小写的搜索的所有小写字母。

正在读取文件:

while(<>){
  print $_/XXX/book/i;  #this line prints the default variable $_
}

样本输入:

I have a BOOK to read.
I like BoOk to read.

示例输出:

I have a book to read.
I like book to read.

我不确定使用“$_”的方式是对还是错。

while(<>) {...} 循环中,主题变量 $_ 包含当前行。如果您未指定要操作的字符串,则替换运算符 s/// 默认使用此变量。试试下面的代码:

my $str = 'book';
while(<>){
    s/(\Q$str\E)/lc /gei;
    print;
}
  • 注意:如果您不想替换另一个词中的子字符串 book,您可以在正则表达式中添加词边界 \b

    s/\b(\Q$str\E)\b/lc /gei;
    
  • 注意:使用双括号 <<>><> 更安全,详情请参阅 perlop