从href中提取链接并将其放在括号内

时间:2016-05-09 17:03:29

标签: php regex hyperlink

我搜索过,找不到我要找的东西。

通常情况如下:

<p>
    Hi how are you? Have you checked <a href="http://www.google.com">Google</a> or <a href="http://www.youtube.com">YouTube</a>?
</p>

但我希望拥有,因为我愿意在打印或PDF页面上应用此内容如下:

<p>
     Hi how are you? Have you checked <a href="http://www.google.com">Google</a> (<a href="http://www.google.com">http://www.google.com</a>)
     or <a href="http://www.youtube.com">YouTube</a> (<a href="http://www.youtube.com">http://www.youtube.com</a>)?
</p>

现在,我明白应该有一些正则表达式的工作,但我不知道如何使用它。该文本将取自变量$ content,其中包含文章,我想要的是$ content内的所有链接都保留,因为它们加上href的内容作为括号内的附加超链接“() “因此,假设有人在阅读印刷文章时,超链接就能看到实际的URL。

2 个答案:

答案 0 :(得分:2)

使用伪元素在链接后添加href,例如:

a[href]:after  
{
    content: " (" attr(href) ") ";
}

答案 1 :(得分:0)

这是一个方便的小功能,可能就足够了。

    <?php

        /**@var string $strInput  THE STRING TO BE FILTERED */
        function doubleUpOnURL($strInput){
            $arrAnchorSplit     = preg_split("#<\/a>#", $strInput);
            $strOutput          = "";
            $anchorRegX         = '(<a\s*href=[\'\"])(.+)([\'\"]>)(.*)';
            foreach($arrAnchorSplit as $anchoredString){
                $strOutput     .= preg_replace("#" . $anchorRegX . "#si" , "$1$2$3$4</a> ($1$2$3$2</a>)", $anchoredString);
            }
            return $strOutput;
        }

        $strInput = '<p>Hi how are you? Have you checked <a href="http://www.google.com">Google</a> or <a href="http://www.youtube.com">YouTube</a>?</p>';

        echo(doubleUpOnURL($strInput));
        //OUTPUTS:
        // Hi how are you? Have you checked Google (http://www.google.com) or YouTube (http://www.youtube.com)?

我希望你觉得它有用......