Помогите корректно разбить строку

Тема в разделе "Регулярные выражения", создана пользователем Festem, 15 фев 2016.

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

    Festem Постоялец

    Регистр.:
    4 сен 2014
    Сообщения:
    97
    Симпатии:
    26
    Есть список авторов
    Код:
    $autors="Michael Rapaport, Bob Saget, Moran Atias, Jay R. Ferguson, Ethan Russell";
    Мне надо сделать из него список активных ссылок. Но не могу побороть пробелы и точки

    Делаю вот так

    Код:
    echo preg_replace('/(\w+)/', '<a href="/tags/$1">$1</a>', $autors);
    
    Но регулярка разбивает имена на составляющие. Как заставить ее корректно работать?
     
  2. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    527
    Симпатии:
    252
  3. Festem

    Festem Постоялец

    Регистр.:
    4 сен 2014
    Сообщения:
    97
    Симпатии:
    26
    Подскажите, пожалуйста, а есть возможность изменить в выводе
    Код:
    <a href="/tags/$1">$1</a>
    изменить /tags/$1 так чтоб в переменной пробелы становились плюсами и текст приводился к нижнему регистру? Или это уже надо средствами PHP делать после получения новой строки?

    Те. чтоб
    Код:
    <a href="/tags/Michael Rapaport">Michael Rapaport</a>
    выглядело бы как
    Код:
    <a href="/tags/michael+rapaport">Michael Rapaport</a>
     
  4. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    527
    Симпатии:
    252
    Festem нравится это.
  5. Festem

    Festem Постоялец

    Регистр.:
    4 сен 2014
    Сообщения:
    97
    Симпатии:
    26
    Я попутал. Надо не плюс а тире делать вместо пробела.

    Те. чтоб
    Код:
    <a href="/tags/Michael Rapaport">Michael Rapaport</a>, <a href="/tag/Moran Atias">Moran Atias</a>
    выглядело бы как
    Код:
    <a href="/tags/Michael-Кapaport">Michael Rapaport</a>, <a href="/tag/Moran-Atias">Moran Atias</a>

    Регистр букв неважен. Главное в участках "/tags/(.*)" пробел поменять на тире.

    Я беру переделанную строку из вашего кода https://regex101.com/r/yH7bQ5/1 в переменную $Reg_str и выходит надо делать еще одну регулярку чтоб в этой строке $Reg_str сделать нужные изменения? Можете подсказать как это сделать?
     
  6. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    1.005
    Симпатии:
    270
    PHP:
    $autors="Michael Rapaport, Bob Saget, Moran Atias, Jay R. Ferguson, Ethan Russell";
    // разбиваем строку на элементы массива.
    //Разделитель запятая или запятая + пробел
    $autors explode',' $autors );
    // тут у нас $autors - уже массив
    echo '<pre>'
    print_r($autors);

    // обходим элементы массива
    foreach $autors as $key => $val {

    echo 
    '<a href="/tags/'.urlencode($val).'">'.$val.'</a>'
    }
    и не надо никаких регулярок.
     
    Festem нравится это.
  7. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    527
    Симпатии:
    252
    $Reg_str сейчас имеет вид массива. Нужно сделать перебор массива через foreach() и в каждой итерации будет происходить замена пробелов на дефиз. $var = str_replace(' ','-',$no_replace);
    а ниже вывод
    echo '<a href="/tags/$var">$no_replace</a>';
    Если не получится сделать - пиши в личку.
     
    Festem нравится это.
Статус темы:
Закрыта.