将[b]转换为<b>

时间:2015-06-03 15:48:59

标签: php replace

我对模式和preg_replace没有多少经验所以我知道我做错了。但我不确定正确的语法应该是什么。

在这种情况下,我正在尝试将[/ b]转换为表单提交。

这是我最好的尝试,显然是不正确的:

    $patterns = array();
    $patterns[0] = '/[b]/';
    $patterns[1] = '/[/b]/';
    $patterns[2] = '/[i]/';
    $patterns[3] = '/[/i]/';
    $patterns[4] = '/[u]/';
    $patterns[5] = '/[/u]/';
  $replace = array();
    $replace[0] = '/<b>/';
    $replace[1] = '/</b>/';
    $replace[2] = '/<i>/';
    $replace[3] = '/</i>/';
    $replace[4] = '/<u>/';
    $replace[5] = '/</u>/';
  $new = preg_replace($patterns, $replace, $string);

2 个答案:

答案 0 :(得分:3)

可以使用str_replace()

更简单地完成此操作
$search  = array('[b]', '[/b]', '[i]', '[/i]');
$replace = array('<b>', '</b>', '<i>', '</i>');

str_replace($search, $replace, $string );

答案 1 :(得分:1)

  1. 替换不需要分隔符。
  2. 这不需要是正则表达式,您可以使用str_replace执行此操作。
  3. []是正则表达式中的特殊字符,因此需要它们 逃脱。
  4. 您使用分隔符作为正则表达式中需要转义的字符的任何地方。
  5. 以下所有这些解决方案都区分大小写。如果您同时允许使用大写字母,则应使用i修饰符作为正则表达式,str_ireplace应使用str_replace代替$patterns = array(); $patterns[0] = '/\[b\]/'; $patterns[1] = '/\[\/b\]/'; $patterns[2] = '/\[i\]/'; $patterns[3] = '/\[\/i\]/'; $patterns[4] = '/\[u\]/'; $patterns[5] = '/\[\/u\]/'; $replace = array(); $replace[0] = '<b>'; $replace[1] = '</b>'; $replace[2] = '<i>'; $replace[3] = '</i>'; $replace[4] = '<u>'; $replace[5] = '</u>'; $new = preg_replace($patterns, $replace, $string);
  6. 示例1:

    $patterns = array();
    $patterns[0] = '/\[(\/?)b\]/';
    $patterns[1] = '/\[(\/?)i\]/';
    $patterns[2] = '/\[(\/?)u\]/';
    $replace = array();
    $replace[0] = '<$1b>';
    $replace[1] = '<$1i>';
    $replace[2] = '<$1u>';
    $new = preg_replace($patterns, $replace, $string); 
    

    如果您希望使用正则表达式,请使用正则表达式功能。

     $patterns = array();
     $patterns[0] = '[b]';
     $patterns[1] = '[/b]';
     $patterns[2] = '[i]';
     $patterns[3] = '[/i]';
     $patterns[4] = '[u]';
     $patterns[5] = '[/u]';
     $replace = array();
     $replace[0] = '<b>';
     $replace[1] = '</b>';
     $replace[2] = '<i>';
     $replace[3] = '</i>';
     $replace[4] = '<u>';
     $replace[5] = '</u>';
     $new = str_replace($patterns, $replace, $string);
    

    或使用str_replace ...

    $new = preg_replace('~\[(/?)(b|i|u)\]~', '<$1$2>', $string); 
    

    更好的正则表达式......

    CRON JOBS