【问题标题】:How to match a substring and convert it to a hyperlink?如何匹配子字符串并将其转换为超链接?
【发布时间】:2017-11-28 14:52:15
【问题描述】:

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

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

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

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

@:url 等于我的推广网站,然后[] 中的内容是我的&lt;a href=""&gt;&lt;/a&gt; 元素的文本。

所以,我需要寻找@:url[ANYTHING],然后提取ANYTHING 来创建这个&lt;a href=""&gt;ANYTHING&lt;/a&gt;

【问题讨论】:

  • 永远不要使用strstr() 来检查子字符串是否存在,使用strpos() 因为它更有效。手册建议:Note #2@php.net/manual/en/function.strstr.php
  • ...当然,如果您使用preg_replace(),则没有理由首先检查子字符串是否存在——如果子字符串不存在,该函数将不会替换任何内容。

标签: php html regex string preg-replace


【解决方案1】:

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

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

这将匹配/@:&lt;something&gt;[anotherthing]/ 形式的字符串并将它们替换为&lt;a href="something"&gt;anotherthing&lt;/a&gt;

更新:

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

这将匹配/@:url[thing]/ 形式的字符串并将它们替换为&lt;a href="your promo url in that variable"&gt;thing&lt;/a&gt;

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

【讨论】:

  • 你非常接近,@:url 只是一个静态变量,告诉我我将在我的代码中执行&lt;a href=""&gt;&lt;/a&gt;。它告诉我我也需要将$promo-&gt;websiteUrl 放入href 属性中。所以我不需要提取它。但是,我确实需要提取这些字符 [] 之间的文本,然后将其放在 &lt;a&gt;&lt;/a&gt; 属性中。总之,1 美元不好,但 2 美元是好的。
  • @Devoplex 我已经更新了答案。检查更新的细分。
  • 哇,好用!非常感谢。但是你知道我应该在if 条件下写什么吗?这是唯一在那里不起作用的东西......
  • 如果你必须有一个 if(你并不真正需要)它可能是 if (strstr($text, "@:url")
  • 谢谢,我只做了preg_match("#@:url\[(.*?)\]#", $text),效果很好。
【解决方案2】:

你可以试试这个吗?

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

【讨论】:

  • 正如我在下面所说的,我需要提取 [ ] 之间的值,然后将其放在您写 HEY 的位置。
  • 我编辑了我的答案。你能试试这个吗?您将看到您需要 print_r() 函数中的数据。
  • 我试过了,效果也很好,但我更喜欢@apokryfos 的答案。
猜你喜欢
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 2014-05-05
相关资源
最近更新 更多