0

我已经为此奋斗了好几天。我试图让我的 preg_replaces 工作。我正在preg-replace从数据库中获取要使用的数据并将它们绑定到变量。$post_preview是其中之一。

<?php
    $body_sub = substr($post_preview, 0) . "<br><br><a href='post.php?id=$post_id'> Continue Reading →&lt;/a>";
    echo nl2br($body_sub); ?></p>
            <?php
    //bold
        $post_preview = preg_replace('/(\[bold\])/', '<strong>', $post_preview);
        $post_preview = preg_replace('/(\[\/bold\])/', '</strong>', $post_preview);
        echo '[bold]Test[/bold]';
    //italic
        $post_preview = preg_replace('/(\[i\])/', '<i>', $post_preview);
        $post_preview = preg_replace('/(\[\/i\])/', '</i>', $post_preview);

这不是替换[i]and[bold]也不是[/i]and the [/bold]。即使使用 . 也没有错误E_ALL。我做错了什么,我该如何解决?

4

2 回答 2

1
<?php
//bold
$post_preview = preg_replace('/\[bold\]/', '<strong>', $post_preview);
$post_preview = preg_replace('/\[\/bold\]/', '</strong>', $post_preview);
//italic
$post_preview = preg_replace('/\[i\]/', '<i>', $post_preview);
$post_preview = preg_replace('/\[\/i\]/', '</i>', $post_preview);

echo $post_preview;
?>

这应该这样做。我想知道为什么您要对这些使用正则表达式。如果在这种情况下使用str_replace会不会容易得多?

于 2013-09-22T17:34:23.690 回答
0

您的正则表达式有太多括号(请参阅 n0tiz 的帖子)。然而,这可以大大简化。首先,我建议对一个标签使用一个正则表达式,而不是两个。这可以通过类似(.*)?含义的通配符轻松完成:

现在,由于您的操作没有任何参数,因此在下一部分中,由于两个操作相同,它们应该进入一个循环,因此代码只需要编写一次。

$text = "[bold]hello this [i]is a test[/bold][bold]i[/i]";

$html_tags = array(
    "bold" => "strong",
    "i" => "em",
);

foreach ($html_tags as $code=>$tag)
    $text = preg_replace("/\[$code\](.*)?\[\/$code]/i", "<$tag>$1</$tag>", $text);

使用一个正则表达式的优点是错误的代码不会创建错误的 HTML。

于 2013-09-22T17:38:43.863 回答