[Perl] Замена определенного по счету символа

Discussion in 'PHP' started by apofis, 25 Apr 2010.

  1. apofis

    apofis New Member

    Joined:
    23 Feb 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Добрый день!

    Как можно заменить в тексте определенный по счету символ?


    Например, вот текст:
    Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию.

    Как заменить десятый по счету пробел на любой другой символ?
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    http://perldoc.perl.org/functions/substr.html
     
    _________________________
  3. apofis

    apofis New Member

    Joined:
    23 Feb 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Я в том смысле, что неизвестно какой по счету символ в тексте этот десятый пробел.
     
  4. Deathdreams

    Deathdreams Elder - Старейшина

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    PHP:
    http://php.net/manual/en/function.substr-replace.php
     
  5. psyx

    psyx New Member

    Joined:
    5 Aug 2009
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    Используй регулярные выражения, в твоем случае поиск n-го совпадения:
    http://perl.find-info.ru/perl/015/search/1.htm
     
  6. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    PHP:
    $a 'qwertyuiopasdfghjklzxcvbnm';
     print 
    $a."\n";
     print 
    substr($a09) . '!' substr($a10length($a));
    если заранее знаешь какие символы заменять надо, заменяй регуляркой
     
  7. taxpayer

    taxpayer Member

    Joined:
    17 Jan 2010
    Messages:
    31
    Likes Received:
    7
    Reputations:
    3
    >"Как заменить 10й пробел в строке?"
    А то что-то вы странно не понимаете как обстоит вопрос


    Я на низком уровне знаю перл, мб это как-то близко к делу
     
    #7 taxpayer, 25 Apr 2010
    Last edited: 25 Apr 2010
  8. life_glider

    life_glider Member

    Joined:
    13 Apr 2010
    Messages:
    42
    Likes Received:
    25
    Reputations:
    33
    PHP:
    #!/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;
    }
    вот так например. Только он почему то переносы строк убивает.
     
  9. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    $str =~ s{(\s)}{++$count == 10 ? '[SPACE]' : $1;}ge;
    
    ?
     
  10. taxpayer

    taxpayer Member

    Joined:
    17 Jan 2010
    Messages:
    31
    Likes Received:
    7
    Reputations:
    3
    krypt3r, не проще использовать декремент? зачем лишние сравнения?
     
  11. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Вариант krypt3r'a быстрее работает
     
    _________________________
  12. taxpayer

    taxpayer Member

    Joined:
    17 Jan 2010
    Messages:
    31
    Likes Received:
    7
    Reputations:
    3
    Kaimi, потому что он не выносил функцию, а оставил её в регекспе, не в этом суть