0

我在做最简单的 Perl REGEX 时遇到了麻烦。它在 Notepad++ 中正常工作,但在 Perl 中不能正常工作。

open FILE, "Something.txt";
while (<FILE>) {
   s/./f/;
    print;
}

然而,输出仅将每行的第一个字母更改为 F。当这个正则表达式明确表示将每个字符更改为 F!

4

4 回答 4

3

我有一段时间没有使用 perl,但是尝试一下s/./f/g(根据 Quentin 在评论中的说法,g 使它成为全局,而不是在第一场比赛后停止(谢谢))。

于 2012-05-16T23:06:31.417 回答
1

您需要添加g修饰符以使其全局化,否则它将在第一次匹配后停止。

s/./f/g
于 2012-05-16T23:06:32.227 回答
1

请参阅以下示例代码:

文件:

$ cat /tmp/test
aaaa
bbbb
cccc

Perl 代码(我使用perlconsole

Perl> open FH, "<", "/tmp/test"
1

Perl> while (<FH>) { s/./f/g; print; }
ffff
ffff
ffff


Perl> close FH
1

Perl> 

替换中的g修饰符表示所有出现,请参阅http://perldoc.perl.org/perlre.html#Modifiers

于 2012-05-16T23:08:20.897 回答
0

您需要将其标记为全局更改:

open FILE, "Something.txt";
while (<FILE>) {
   s/./f/g;
    print;
}
CLOSE (FILE);
于 2012-05-16T23:07:05.223 回答