首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我preg_replace怎么了?

我preg_replace怎么了?
EN

Stack Overflow用户
提问于 2013-09-22 17:27:04
回答 2查看 80关注 0票数 0

我已经跟这个打了好几天了。我正试着让我的preg_replaces工作。我将从数据库中获取使用preg-replace的数据,并将它们绑定到变量。$post_preview就是其中之一。

代码语言:javascript
复制
<?php
    $body_sub = substr($post_preview, 0) . "<br><br><a href='post.php?id=$post_id'> Continue Reading →</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][bold],也不会取代[/i][/bold]。即使使用E_ALL也没有错误。我做错了什么,该如何解决?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-22 17:38:43

正则表达式的括号太多(请参阅n0tiz的post)。然而,这可以大大简化。首先,我建议对一个标签使用一个正则表达式,而不是两个。这可以很容易地通过通配符(如(.*)? )来完成,意思是:

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

代码语言:javascript
复制
$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。

票数 0
EN

Stack Overflow用户

发布于 2013-09-22 17:34:23

代码语言:javascript
复制
<?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;
?>

这样就行了。但是,我想知道为什么要为这些使用正则表达式。如果在这种情况下使用替换,岂不是简单得多吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18946696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档