2013-02-26 5 views
1

Я использую этот код, и все в порядке, он скрывает текст от $comments содержит от [], но я хочу скрыть текст от других символов. ех. ** && ^^ $$ ## // <>. Что мне нужно добавить здесь, чтобы ВМЕСТОКак скрыть текст между несколькими <> // [] **

Date <20.02.2013> Time [11-00] Name #John# 

Имейте это:

Date Time Name 

?

function replaceTags($startPoint, $endPoint, $newText, $source) { 
    return preg_replace('#('.preg_quote($startPoint).')(.*)('.preg_quote($endPoint).')#si', '$1'.$newText.'$3', $source); 
} 

$source= $comments; 
$startPoint='['; 
$endPoint=']'; 
$newText=''; 
echo replaceTags($startPoint, $endPoint, $newText, $source); 
+0

Вы забыли добавить '' # ''в качестве второго параметра в' preg_quote() '. –

+0

Мне любопытно узнать, что является результатом '' [xxx] и [yyy] "' с вашим текущим кодом ;-) –

+0

Текущий код просто не отображает все между [] Но я хочу иметь то же самое с другими символами < > ** $$ ## // – Vitalie

ответ

1

Вам просто нужно изменить

$startPoint='['; 
$endPoint=']'; 

в

$startPoint='<'; 
$endPoint='>'; 

Чтобы сделать несколько символов вы можете сделать несколько вызовов функции, например:

$source= $comments; 
$newText=''; 

$str = replaceTags('[', ']', $newText, $source); 
$str = replaceTags('<', '>', $newText, $str); 
$str = replaceTags('*', '*', $newText, $str); 
$str = replaceTags('&', '&', $newText, $str); 
$str = replaceTags('^', '^', $newText, $str); 
$str = replaceTags('$', '$', $newText, $str); 
$str = preg_replace("/\#[^#]+#)/","",$str); 
$str = replaceTags('/', '/', $newText, $str); 

// add more here 
echo $str; 
+0

Thx, но вместо этого я начинаю видеть весь текст с помощью [] Я хочу скрыть весь текст из ВСЕХ <> // ## ** [] – Vitalie

+0

Посмотрите на мой пересмотренный ответ – Husman

+0

Thx он почти работает, кроме «#» - скрыть ВСЕ :(и как скрыть символы <> // @@ ## $$ %% ^^ && ** тоже? – Vitalie

0

Вам придется создавать шаблоны для каждого p воздух:

$pairs = array(
    '*' => '*', 
    '&' => '&', 
    '^' => '^', 
    '$' => '$', 
    '#' => '#', 
    '/' => '/', 
    '[' => ']', // this 
    '<' => '>', // and this pairs differently from the rest 
); 

$patterns = array(); 

foreach ($pairs as $start => $end) { 
    $start = preg_quote($start, '/'); 
    $end = preg_quote($end, '/'); 

    $patterns[] = "/($start)[^$end]*($end)/"; 
} 

echo preg_replace($patterns, '', $s), PHP_EOL; 
// not sure what you want here 
//  echo preg_replace($patterns, '$1' . $newText . '$2', $s), PHP_EOL; 
+0

жаль, что не работает :( – Vitalie

Смежные вопросы