我已经跟这个打了好几天了。我正试着让我的preg_replaces工作。我将从数据库中获取使用preg-replace的数据,并将它们绑定到变量。$post_preview就是其中之一。
<?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也没有错误。我做错了什么,该如何解决?
发布于 2013-09-22 17:38:43
正则表达式的括号太多(请参阅n0tiz的post)。然而,这可以大大简化。首先,我建议对一个标签使用一个正则表达式,而不是两个。这可以很容易地通过通配符(如(.*)? )来完成,意思是:
(开始.每个字符* 0或更多次)末端?不要贪婪(在正则表达式的上下文中,懒惰和贪婪意味着什么?)现在,由于您的操作没有任何参数,所以在接下来的部分中,由于两个操作都是相同的,所以它们应该进入一个循环,所以代码只需要编写一次。
$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-22 17:34:23
<?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;
?>这样就行了。但是,我想知道为什么要为这些使用正则表达式。如果在这种情况下使用替换,岂不是简单得多吗?
https://stackoverflow.com/questions/18946696
复制相似问题