Замена последнего пробела на \t

Тема в разделе "Регулярные выражения", создана пользователем bob, 17 янв 2013.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. bob

    bob

    Регистр.:
    30 авг 2011
    Сообщения:
    155
    Симпатии:
    45
    Подскажите пожалуйста регулярку для замены последнего в строке пробела на табуляцию.
    пример исходного текста:

    качественные эксклюзивные подарки мужчине 12
    эксклюзивные подарки киев 170
    пример желаемого:
    качественные эксклюзивные подарки мужчине\t12
    эксклюзивные подарки киев\t170
    Спасибо.
     
  2. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    PHP:
    $str preg_replace("/\s$/"'\t'$str);
     
    Можно также заюзать rtrim() для удаления пробела справа и через конкатенацию добавить таб:
    $str rtrim($str).'\t';
    Добавлено позже:
    Прошу прощения за невнимательность - думал что пробел в конце строки.
    Если пробел не в конце, то самый простой на мой взгляд способ - сделать реверс строки, заменить первый пробел, и снова сделать реверс строки.

    PHP:
    $str 'Качественные подарки мужчине 12';
    $str_new =strrev(preg_replace("/\s/""\t"strrev($str), 1));
    // возможно надо "побаловаться" с экранированием пробела в условии регулярки

    Если исходный текст находится в файле, и содержит более чем одну строку, то многострочность реализуется так:
    PHP:
    $lines file('http://www.example.com/text.txt');
    foreach (
    $lines as $line_num => $str) {
      
    $str_new =strrev(preg_replace("/\s/""\t"strrev($str), 1));
    }
     
    latteo и bob нравится это.
  3. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    453
    Правильная регулярка без всяких переворачиваний:
    PHP:
    $str preg_replace("/(.*)\x20/"'$1\t'$str);
     
    bob и latteo нравится это.
Статус темы:
Закрыта.