Как я могу разделить строку Perl только в последнем появлении разделителя?

Вы можете удалить файл .htaceess и дать системе создать новый (пустой или базовый) файл. Возможно, некоторые строки, которые вы добавили, являются неправильными инструкциями или что-то еще внутри, вызывает проблему. Затем вы можете добавить строку за строкой из вашего старого файла .htaccess , чтобы узнать, что вызвало проблему.

Это сработало для меня. Линии, указывающие, что машина не отображает расширения php, были проблемой в моем случае ( RewriteCond и RewriteRule ). Мой старый файл .htaccess отлично работал на общем сервере, но эта проблема возникла, когда я переключился на VPS.

13
задан brian d foy 18 March 2010 в 15:06
поделиться

4 ответа

split(/:([^:]+)$/, $str)
18
ответ дан 1 December 2019 в 19:07
поделиться

Вы можете сделать это с помощью разделения и реверса следующим образом:

my $str="1:2:3:4:5";
my ($a,$b)=split(':',reverse($str),2); # reverse and split.

$a = reverse($a); # reverse each piece.
$b = reverse($b);

($a,$b) = ($b,$a); # swap a and b

Теперь $ a будет 1: 2: 3: 4 и $ b будет 5 .

Гораздо более простой и понятный способ - использовать регулярное выражение, как это сделал Марк в своем ответе.

2
ответ дан 1 December 2019 в 19:07
поделиться

Вы можете использовать сопоставление с образцом вместо split () :

my ($a, $b) = $str =~ /(.*):(.*)/;

Первая группа захватывает все до последнего появления ':' жадно, а вторая группа захватывает остальных.

В случае, если ':' не присутствует в строке, Perl достаточно умен, чтобы обнаружить это и не найти совпадение без какого-либо возврата.

8
ответ дан 1 December 2019 в 19:07
поделиться

you can also use rindex() eg

my $str="1:2:3:4:5";
$i=rindex($str,":");
$a=substr($str,0,$i);
$b=substr($str,$i+1);
print "\$a:$a, \$b: $b\n";

output

$ perl perl.pl
$a:1:2:3:4, $b: 5
8
ответ дан 1 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: