Подскажите как сделать замену Нужно найти первое по тексту сообщение, которое лежит между "*" и "*", и если есть перенос строки, убрать его и весь текст, что между первыми "*" обрамить в тег <i> Остальные звездочки что по тексту пропускать. Код (Text): *тут начало текста* далее идет продолжение *снова продолжение* идет далее текст Нужно что бы получилось Код (Text): *<i>тут начало текста</i>* далее идет продолжение *снова продолжение* идет далее текст Есть такое решение, но вначале происходит замена всех переносов строки PHP: $str = str_replace(array("\r\n", "\r", "\n"), ' ', $str); $str = preg_replace('/\*(.*)\*/U', '*<i>$1</i>*<br>', $str); Нужно применить только к первым "*"и "*". Если по тексту еще есть *, то и к ним применяется все.
PHP: <?php $output = preg_replace_callback('/\*([^*]+)\*/', function ($matches) { return '<i>'.str_replace(PHP_EOL,' ',$matches[0]).'</i>'; }, $str, 1);
если это задание дал препод - его лучше решить самому, это недолго. помогут такие штуки как http://regex101.com единственное, что нужно иметь в виду, это то, что в регулярках вечно куча всяких спецсимволов, и если тебе надо юзать какую-то закорючку, то 99.99% что её надо экраниновать слешем. Ну и ещё то, что в регулярках ещё есть модификаторы, которые меняют поведение так, что она вдруг перестаёт работать. Например модификатор, который говорит регулярке кушать не строки, а многострочные фрагменты. Вышеуказанный сайт позволяет это всё отладить вживую.
http://www.regular-expressions.info/tutorial.html на вот, читай до Lookahead & Lookbehind включительно и без пропусков, а потом по желанию
=) Я для начала на понятном для меня языке почитаю. Когда более менее понятно будет, тогда и там погляжу.