Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Perl:反转第一个';N';使用替换运算符在给定输入行中的字数。保持间距不变_Regex_Perl - Fatal编程技术网

Regex Perl:反转第一个';N';使用替换运算符在给定输入行中的字数。保持间距不变

Regex Perl:反转第一个';N';使用替换运算符在给定输入行中的字数。保持间距不变,regex,perl,Regex,Perl,我是Perl模式匹配的初学者 在解决以下问题时要面对问题 编写一个程序,使用替换运算符反转给定输入行中第一个“N”字数的顺序。保持间距不变 下面的程序正在倒转,直到最后一句话!我无法限制替换运算符打断@n个单词 #!/usr/bin/perl $str = "Test TEST test tesT tESt"; $str =~ s/(\w+)(\s*)/reverse($1) . $2/ge; print $str . "\n"; 有谁能帮我用代换算子解决这个问题吗? 是否真的可以使用替

我是Perl模式匹配的初学者

在解决以下问题时要面对问题

编写一个程序,使用替换运算符反转给定输入行中第一个“N”字数的顺序。保持间距不变

下面的程序正在倒转,直到最后一句话!我无法限制替换运算符打断@n个单词

#!/usr/bin/perl
$str = "Test TEST   test  tesT tESt";
$str =~ s/(\w+)(\s*)/reverse($1) . $2/ge;
print $str . "\n";
有谁能帮我用代换算子解决这个问题吗?
是否真的可以使用替换运算符限制@n个单词?

我想这需要分两步完成

使用创建一个单词数组

\b(\w+)\b
输出:
['Test','Test','Test','Test','Test']

现在,从给定的数组中,让我们假设字数为
3

因此,您可以从数组的索引
2
开始向后创建一个新列表,并将索引
3
中的其余元素追加


然后您可以将其转换为字符串。

您可以跟踪计数并决定
$i
的值是否反转
$1

my $str = "Test TEST test tesT tESt";

my $i = 0;
$str =~ s/(\w+)/ ++$i <3 ? reverse($1) : $1 /ge;

print $str, "\n";

输入=>“测试”。如果我们想倒转前三个字。Output=>“tseT-tseT-tseT-tesT-tesT”。难道你不能拆分、颠倒顺序并重新放置吗?实际上我只想在模式匹配中使用替换方法。比如,$str=~s/(\w+)(\s*)/反向($1)$2/通用电气
/(\w+)/g
本身就足够好了。如果没有任何其他模式的干扰,它将始终有一个
\b
之前(否则它会更早开始匹配)和之后(否则它会匹配更多)。这就是我一直在寻找的!!只是增加了一些东西来满足“保持间距不变”的要求:$str=~s/(\w+)(\s*)/++$i
tseT TSET test tesT tESt