0

假设我有一个这样的字符串:

$string = 'Lorem Ipsum available, <a href="##article-6##">but the majority</a> have suffered alteration in some form, by injected humour.';

注意<a href="##article-6##">but the majority</a>

使用它,我想根据数据库中的 id 链接我的文章。

现在,如何在该字符串上执行 preg_replace 以查看我是否有类似的东西##article-6##并仅提取该数字?

这个主意好不好?我能以更好的方式做到这一点吗?

编辑:

我是这样做的:

$post_content = preg_replace_callback('/##article-(\d+)##/', function($matches){$args = explode(',', $matches[1]); // separate the arguments
return call_user_func_array('article_seo_url', $args); /* pass the arguments to article_seo_url function*/ }, $post_content);

使用此代码,我还可以替换多个 url

4

3 回答 3

1

如果你想做一个preg_replace,你会想使用一个正则表达式,比如/##article-(\d+)##/做这样的事情:

$string = 'Lorem Ipsum available, <a href="##article-6##">but the majority</a> have suffered alteration in some form, by injected humour.';
$string = preg_replace('/##article-(\d+)##/', 'link/to/article/with/id/$1.html', $string);

将导致 $string 为:

Lorem Ipsum available, <a href="link/to/article/with/id/6.html">but the majority</a> have suffered alteration in some form, by injected humour.
于 2012-10-14T21:14:28.863 回答
0

如果 ID 始终为 3 位数字,您甚至不需要正则表达式。

$string = 'Lorem Ipsum available, <a href="##article-6##">but the majority</a> have suffered alteration in some form, by injected humour.';
$start = strpos($string, 'article-');
$articleId = substr ( $string , intval($start)+8 , 3 );
于 2012-10-14T21:02:51.843 回答
0

如果您的 href 存储在如下变量中:

$href="http://www.domain.com";

您可以直接将其插入到字符串中,如下所示:

$string = "Lorem Ipsum available, <a href=\"$href\">but the majority</a> have suffered alteration in some form, by injected humour.";

请注意,重要的是您要么转义字面引号,要么使用不同的引号,在这种情况下为单引号。

于 2012-10-14T21:04:48.653 回答