我开始学习perl,我正在使用正则表达式编写一个简单的冒泡排序。但是,我无法正确排序(按字母顺序排列,用空格分隔)。它最终返回相同的字符串。有人可以帮忙吗?我相信这很简单。感谢:
#!/usr/bin/perl
use warnings;
use strict;
my $document=<<EOF;
This is the beginning of my text...#more text here;
EOF
my $continue = 1;
my $swaps = 0;
my $currentWordNumber = 0;
while($continue)
{
$document =~ m#^(\w+\s+){$currentWordNumber}#g;
if($document =~ m#\G(\w+)(\s+)(\w+)#)
{
if($3 lt $1)
{
$document =~ s#\G(\w+)(\s+)(\w+)#$3$2$1#;
$swaps++;
}
else
{
pos($document) = 0;
}
$currentWordNumber++;
}
else
{
$continue = 0 if ($swaps == 0);
$swaps = 0;
$currentWordNumber = 0;
}
}
print $document;
解决:我发现了问题。一句话后我没有考虑标点符号。
答案 0 :(得分:2)
如果您只想对所有单词进行排序,则不必使用正则表达式...只需按换行符和空格分隔文本就可以快得多:
sub bsort {
my @x = @_;
for my $i (0..$#x) {
for my $j (0..$i) {
@x[$i, $j] = @x[$j, $i] if $x[$i] lt $x[$j];
}
}
return @x;
}
print join (" ", bsort(split(/\s+/, $document)));