preg_replace删除自定义标记之间的换行符

时间:2013-11-18 14:47:14

标签: php arrays function foreach preg-replace

因此,如果用户输入[tag] hello [/ tag],那么它的效果很好。但是,如果用户输入:

[标签]你好

你好[/ tag]

在表单中有换行符,[tag] [/ tag]之间的内容不会受到操作的影响。 (。*?)在这里缺少什么?

function tag($string) {
    $rules = array(
        '#\[tag](.*?)\[\/tag\]#i' => '<font style="color: #7c7c7c; font-style: italic;"> $1 <br><hr style="border-style: dotted; border-top: none; border-color: #9f9f9f;"></font>'
    );

    foreach ($rules as $link => $player)
        $string = preg_replace($link, $player, $string);

    return $string;
}

1 个答案:

答案 0 :(得分:0)

你可以试试这个对我有用的东西:

<?php
//
function tag($string) {
  $rules = array(
    '#\[tag](.*?)\[\/tag\]#is' => '<font style="color: #7c7c7c; font-style: italic;"> $1 <br><hr style="border-style: dotted; border-top: none; border-color: #9f9f9f;"></font>'
  );

  foreach ($rules as $link => $player)
  {
    $string = preg_replace($link, $player, $string);
  }

  return $string;
}

//
// test 1:
//
$string = '[tag]Hello How are you[/tag]';
//
echo "<textarea style=\"width: 700px; height: 90px;\">"
  . tag($string)
  . "</textarea>";

//
// test 2:
//
$string = '[tag]Hello

How are you[/tag]
';
//
echo "<textarea style=\"width: 700px; height: 90px;\">"
  . tag($string)
  . "</textarea>";
?>

修饰符'是':

i: ignore case.
s: treat the text in single line mode.