2013-08-13 2 views
0

$string = "Lorem Ipsum is #simply# dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard #dummy# text ever since the 1500s, when an unknown printer took a galley of #type1# and scrambled it to #make# a #type2# specimen book. It has survived not only #five# centuries, but also the #leap# into electronic typesetting, remaining essentially unchanged";preg_match и preg_replace в строке PHP

Я набор жестких кодовых слов, как "#simply# | #dummy# | #five# | #type1#"

Что я ожидаю, как выход:

  1. Если жесткие кодовые слова можно найти в $string он должен быть выделен черным цветом. как "<strong>...</strong>".

  2. Если слово в $string находится в пределах #...#, но недоступно в списке слов жесткого кода, тогда эти слова в строке должны быть выделены красным цветом.

  3. обратите внимание, что даже если у нас есть # type1 # в жестких кодовых словах, если $ string содержит #type2# или #type3#, он также должен быть выделен.

для этого я попытался, как показано ниже

$pattern = "/#(\w+)#/"; 

$replacement = '<strong>$1</strong>'; 

$new_string = preg_replace($pattern, $replacement, $string); 

Это заставляет меня все слова, которые находятся в пределах # .. # теги выделены.

Я плохо в preg_ может кто-то помочь. заранее спасибо.

ответ

0

Не уверен, что я действительно понимаю ваши потребности, но что:

$pat = '#(simply|dummy|five|type\d)#'; 
$repl = '<strong>$1</strong>'; 
$new_str = preg_replace("/$pat/", $repl, $string); 
0

Вы должны использовать preg_replace_callback, которые могут совершать различные действия (с помощью функции обратного вызова) в соответствии с матча. Здесь два захватывая группы используются, чтобы знать, какое содержание было обнаружено:

$pattern = '~#(?:(simply|dummy|five|type[123])|(\w+))#~'; 
$replacement = function ($match) { 
    if (empty($match[2])) return '<strong>'.$match[1].'</strong>'; 
    else return '<strong style="color:red">'.$match[2].'</strong>'; 
}; 

$result = preg_replace_callback($pattern, $replacement, $text); 
+0

Я получил это большое спасибо .... – GOOG

+0

@RakeshRagupathy: Вы должны указать, каким образом, для людей, которые будут читать вас. –

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