如何匹配子字符串并将其转换为超链接?

时间:2017-11-28 14:52:15

标签: php html regex string preg-replace

我的申请需要帮助。我想将子字符串与正则表达式匹配,然后将其提取出来。有我的代码:

$text = getTranslation('end_date', $translation);
if (strstr($text, "/@:url[.*?]/")){
    $text = str_replace("/@:url[.*?]/", "<a href='$promo->wabsiteUrl'>ANYTHING</a>", $text);
}
echo $text;

getTranslation()是我创建的一种方法,用于在对象end_date中获取翻译项$translation。问题是我对正则表达式很糟糕。我尝试了一些东西,它不起作用。

以下是变量$text的内容:@:url[Click here] to find out where to buy Razer inc.(来自$translation

@:url等同于我的促销网站,然后[]中的内容是我的<a href=""></a>元素的文字。

因此,我需要查找@:url[ANYTHING],然后提取ANYTHING以创建此<a href="">ANYTHING</a>

2 个答案:

答案 0 :(得分:2)

我有点迷失,所以这就是我的理解:

preg_replace("#/@:(.*?)\[(.*?)\]/#", "<a href=\"$1\">$2</a>", $text);

这将匹配/@:<something>[anotherthing]/形式的字符串,并将其替换为<a href="something">anotherthing</a>

更新

preg_replace("#/@:url\[(.*?)\]/#", "<a href=\"".$promo->websiteUrl."\">$1</a>", $text);

这将匹配/@:url[thing]/形式的字符串,并将其替换为<a href="your promo url in that variable">thing</a>

如果您不需要//,那么您可以将正则表达式更改为"#@:url\[(.*?)\]#"

答案 1 :(得分:-1)

你能试试吗?

if(preg_match_all('%@:url\[(.*?)\]%i', $text, $matches)){
    print_r($matches);
}