PHP: заменить все экземпляры - PullRequest
       41

PHP: заменить все экземпляры

2 голосов
/ 04 сентября 2011

У меня есть файл чата, который выглядит следующим образом (имя представляет скриншоты, а текст - их строка чата)

name: some text
name2: more text
name: text
name3: text

Я хочу раскрасить все имена до : красным.
Например: <font color=red>myname:</fontcolor> hello Как бы я это сделал?

Я не уверен, почему, но этот код раскрашивает все после двоеточие

echo preg_replace('/(.*?):/', "<font color=#F00>$1</font>:", $output);

Ответы [ 5 ]

5 голосов
/ 04 сентября 2011

Правильный ответ на этот вопрос был предоставлен ранее:

Посмотрите на второй ответ:

PHP: вставьте текст до разделителя

Кроме того, ваша реализация неверна, посмотрите на регулярное выражение, которое должно начинаться с ^:

echo preg_replace('/(.*?):/', "<font color=#F00>$1</font>:", $output);

Должно быть:

echo preg_replace('/^(.*?):/', "<font color=#F00>$1</font>:", $output);
1 голос
/ 04 сентября 2011

try:

echo preg_replace('/^(.*?):(.*?)$/s', "<font color=#F00>\\1</font>:\\2", $output);

EDIT: Это должно работать (пробовал):

trim(preg_replace("/(?:\n)(.*?):(.*?)/s", "<font color=#F00>\\1</font>:\\2", "\n".$str))

Последняя попытка, может быть, вместо этого попытайтесь взорвать ее:

<?php
$content = 'name: some text
name2: more text
name: text
name3: text';
$tmp = explode("\n", $content);
for($i = 0; $i < count($tmp); $i ++) {
    $tmp[$i] = '<span style="color:#F00">'.str_replace(':', '</span>:', $tmp[$i], 1);
}
echo implode("\n", $tmp);
?>

Это предполагает, что все, что находится перед двоеточием, не будет другого двоеточия.


Мой плохой, я неправильно понял последний параметр str_replace ().Попробуйте это:

<?php
$tmp = explode("\n", $content);
for($i = 0; $i < count($tmp); $i ++) {
    $tmp2 = explode(':', $tmp[$i]);
    $tmp2[0] = '<span style="color:#F00">'.$tmp2[0].'</span>';
    $tmp[$i] = implode(':', $tmp2);
}
echo implode("\n", $tmp);
0 голосов
/ 04 сентября 2011

Сделайте регулярное выражение более конкретным:

= preg_replace('/^(\w+):/m', ...

Или, если имена пользователей могут содержать не алфавитные символы:

= preg_replace('/^(\S+):/m', "<b>$1</b>:", $output);
0 голосов
/ 04 сентября 2011

Попробуйте это

echo preg_replace('/([a-zA-Z0-9]*):/', "<font color=#F00>$1</font>:", $output);
0 голосов
/ 04 сентября 2011

поместите: внутри тега шрифта после $ 1

echo preg_replace('/^(.*?):/', "<font color=#F00>$1:</font>", $output);
...