Просмотр полной версии : [Perl] Замена определенного по счету символа
Добрый день!
Как можно заменить в тексте определенный по счету символ?
Например, вот текст:
Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию.
Как заменить десятый по счету пробел на любой другой символ?
http://perldoc.perl.org/functions/substr.html
Я в том смысле, что неизвестно какой по счету символ в тексте этот десятый пробел.
Deathdreams
25.04.2010, 15:12
PHP:
http://php.net/manual/en/function.substr-replace.php
Используй регулярные выражения, в твоем случае поиск n-го совпадения:
http://perl.find-info.ru/perl/015/search/1.htm
$a = 'qwertyuiopasdfghjklzxcvbnm';
print $a."\n";
print substr($a, 0, 9) . '!' . substr($a, 10, length($a));
если заранее знаешь какие символы заменять надо, заменяй регуляркой
taxpayer
25.04.2010, 21:37
>"Как заменить 10й пробел в строке?"
А то что-то вы странно не понимаете как обстоит вопрос
Я на низком уровне знаю перл, мб это как-то близко к делу
use warnings;
use strict;
my $a = 'A B C D E F G H I J K L M';
my $i = 7; # седьмой пробел
$a =~ s!(\s)!_a_($1, --$i)!eg;
print $a;
sub _a_{ $_[1] ? return $_[0] : return 'S' }
life_glider
25.04.2010, 21:58
#!/usr/bin/perl
$txt="dgas adg dgasdg asdg adsg a dga sdga sdg adsg asdg asgd";
@arr=split(" ",$txt);
if(scalar @arr > 10)
{
print join(' ',@arr[0..9]).'!'.join(' ',@arr[10..$#arr]);
}
else
{
print $txt;
}
вот так например. Только он почему то переносы строк убивает.
$str =~ s{(\s)}{++$count == 10 ? '[SPACE]' : $1;}ge;
?
taxpayer
26.04.2010, 15:13
krypt3r, не проще использовать декремент? зачем лишние сравнения?
krypt3r, не проще использовать декремент? зачем лишние сравнения?
Вариант krypt3r'a быстрее работает
taxpayer
26.04.2010, 15:34
Kaimi, потому что он не выносил функцию, а оставил её в регекспе, не в этом суть
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot