За последние 24 часа нас посетили 17111 программистов и 1835 роботов. Сейчас ищут 1703 программиста ...

Убрать один перенос строки между символами.

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

  1. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    Подскажите как сделать замену

    Нужно найти первое по тексту сообщение, которое лежит между "*" и "*", и если есть перенос строки, убрать его и весь текст, что между первыми "*" обрамить в тег <i>
    Остальные звездочки что по тексту пропускать.

    Код (Text):
    1. *тут начало
    2. текста*
    3. далее идет продолжение
    4. *снова продолжение*
    5. идет далее текст
    Нужно что бы получилось

    Код (Text):
    1. *<i>тут начало текста</i>*
    2. далее идет продолжение
    3. *снова продолжение*
    4. идет далее текст
    Есть такое решение, но вначале происходит замена всех переносов строки
    PHP:
    1. $str = str_replace(array("\r\n", "\r", "\n"), ' ', $str);
    2. $str = preg_replace('/\*(.*)\*/U', '*<i>$1</i>*<br>', $str);
    Нужно применить только к первым "*"и "*".
    Если по тексту еще есть *, то и к ним применяется все.
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    PHP:
    1. <?php
    2. $output = preg_replace_callback('/\*([^*]+)\*/', function ($matches) {
    3.     return '<i>'.str_replace(PHP_EOL,' ',$matches[0]).'</i>';
    4. }, $str, 1);
     
    Tarasyan и denis01 нравится это.
  3. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    спасибо, попробую.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если это задание дал препод - его лучше решить самому, это недолго. помогут такие штуки как http://regex101.com
    единственное, что нужно иметь в виду, это то, что в регулярках вечно куча всяких спецсимволов, и если тебе надо юзать какую-то закорючку, то 99.99% что её надо экраниновать слешем. Ну и ещё то, что в регулярках ещё есть модификаторы, которые меняют поведение так, что она вдруг перестаёт работать. Например модификатор, который говорит регулярке кушать не строки, а многострочные фрагменты.

    Вышеуказанный сайт позволяет это всё отладить вживую.
     
    Tarasyan нравится это.
  5. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    Нет, не препод.
    Только учусь для себя, но с регулярными не могу разобраться =)
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну круто, что сам для себя. Вот тот сайт очень помогает в ковырянии регулярок.
     
  7. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    Да, я таких сайтов несколько нашел.
    Пытаюсь разобраться.
    Я думаю главное понять механизм.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Tarasyan и denis01 нравится это.
  9. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    =) Я для начала на понятном для меня языке почитаю. Когда более менее понятно будет, тогда и там погляжу.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    англ яз не такой сложный, когда технический в документации.
     
  11. Tarasyan

    Tarasyan Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    42
    Симпатии:
    0
    Все верно. Но я еще не ас в php. Изучаю тих тих.