用变量替换字符串的一部分,但使用复杂的分隔符

时间:2014-11-10 16:12:11

标签: php regex

我知道我可以使用str_replace在字符串中很容易地替换某些东西。但是当我找不到一个非常简单的内容分隔符时,我完全不知道该怎么做。

我的字符串可以在其中的任何位置包含链接,例如

$tweet = "Testing a tweet with a link https://t.co/h4C0aobVnK in the middle";

$tweet = "Testing a tweet with a link: https://t.co/dgg0eA3uIt";

我有一个变量$embedded_link,其中包含一个已经准备好的美化<a>标记。 E.g

<a href="https://dev.twitter.com/oauth/application-only" target="_blank">dev.twitter.com/oauth/applicat…</a>

我需要替换始终以https://开头的链接,并在有下一个空格时结束,并将其替换为$embedded_url

所以这个:

$tweet = "Testing a tweet with a link https://t.co/h4C0aobVnK in the middle";

成为这个:

$tweet = "Testing a tweet with a link <a href="https://dev.twitter.com/oauth/application-only" target="_blank">dev.twitter.com/oauth/applicat…</a> in the middle";

你会怎么做?我在考虑使用https://space作为分隔符,但是字符串末尾可能没有空格。

2 个答案:

答案 0 :(得分:1)

从您的示例中可以看出以下内容适用于您:

$tweet = preg_replace('~\bhttps://\S+~', $embedded_url, $tweet);

RegEx Demo

答案 1 :(得分:0)

通常我使用strstr查找以https://

开头的查找字符串
$url = strstr($str, "https://");

然后使用strpos进行查找结束。如果找到空间,那么通过这个长度substr字符串。其他变量已包含url。

$pos = strpos($url, " ");
if ($pos > 0) {
  $url = substr($url, 0, $pos)
}