【问题标题】:PHP: Replacing obvious hyperlink to a html hyperlinkPHP:将明显的超链接替换为 html 超链接
【发布时间】:2014-03-30 08:26:02
【问题描述】:

所以我正在使用这样的 API 来编码超链接:

<u>\n\\*HYPERLINK \"http://www.youtube.com/watch?v=A0VUsoeT9aM\"A Youtube video</u>

我想将它们转换为普通的超链接:

<a href="http://www.youtube.com/watch?v=A0VUsoeT9aM">A Youtube video</a>

我有一些问题,因为它使用了很多反斜杠和引号

所以我想也许这会起作用:

 <?
$string = '<u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"A Youtube Video</u>';
$patterns = array();
$patterns[0] = '/(<u>....................)/g';
$patterns[1] = '/(\\\\")(?!http:\/\/)/g"';
$patterns[2] = '/(<\/u>)/g';
$replacements = array();
$replacements[2] = '<a href=';
$replacements[1] = '"';
$replacements[0] = '</a>';
echo preg_replace($patterns, $replacements, $string);
 ?>

但是 A. 这不起作用:警告:preg_replace(): Unknown modifier 'g' in X.php on line 11

和 B. 如果超链接文本也是 Url,则此方法不起作用

【问题讨论】:

  • 使用 API 而不是正则表达式
  • 你到底是什么意思?我使用了一个显而易见的 API,我现在必须使用它......

标签: php regex hyperlink preg-replace


【解决方案1】:

试试这个:

$string = '<u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"A Youtube Video</u>';
$pattern = '/http[?.:=\\w\\d\\/]*/';
$namePattern = '/(?:")([\\s\\w]*)</';
preg_match($pattern, $string, $matches);
preg_match($namePattern, $string, $nameMatches);

echo 'a href="'.$matches[0].'">'.$nameMatches[1].'/a>';
//outputs <a href="http://www.youtube.com/watch?v=A0VUsoeT9aM">A Youtube Video</a>

编辑:已更改,因此名称也被提取。

【讨论】:

  • 感谢这适用于 Url 部分,但我也想获得链接的名称,这更困难:(
  • 非常感谢!我只是正则表达式的菜鸟!
  • 您能帮我替换文本变量中的所有这些链接吗?
猜你喜欢
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 2011-09-30
  • 1970-01-01
  • 2012-07-20
  • 2018-01-30
  • 2011-04-20
相关资源
最近更新 更多