Bri*_*ica 6 php regex replace href hyperlink
我知道我已经看到这方面做了很多,但我需要的东西比常规更有所不同.可悲的是,当我在任何地方搜索它时,它会被隐藏在关于将链接转换为html标记链接的帖子中.我希望PHP函数从链接中删除"http://"和"https://"以及.*之后的任何内容.所以基本上我要找的是将A转换为B.
A: http://www.youtube.com/watch?v=spsnQWtsUFM
B: <a href="http://www.youtube.com/watch?v=spsnQWtsUFM">www.youtube.com</a>
Run Code Online (Sandbox Code Playgroud)
如果它有帮助,这是我目前的PHP正则表达式替换功能.
ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\" class=\"bwl\" target=\"_new\">\\0</a>", htmlspecialchars($body, ENT_QUOTES)));
Run Code Online (Sandbox Code Playgroud)
说我对正则表达式完全没有理解可能也会有所帮助.谢谢!
编辑:当我输入这样的评论时,我得到像这样的HTML ,它根本不起作用,因为它带有链接的文本.如果有人只评论链接,那么效果很好.这是我将功能更改为此时的情况blahblah https://www.facebook.com/?sk=ff&ap=1 blah
<a class="bwl" href="blahblah https://www.facebook.com/?sk=ff&ap=1 blah">www.facebook.com</a>
preg_replace("#^(.*)//(.*)/(.*)$#",'<a class="bwl" href="\0">\2</a>', htmlspecialchars($body, ENT_QUOTES));
Run Code Online (Sandbox Code Playgroud)
这是简单而最干净的方式:
$str = 'http://www.youtube.com/watch?v=spsnQWtsUFM';
preg_match("#//(.+?)/#", $str, $matches);
$site_url = $matches[1];
Run Code Online (Sandbox Code Playgroud)
编辑:我假设$ str首先被检查为一个URL,所以我把它留了出来.另外,我假设所有网址都包含"http://"或"https://".如果网址格式是这样www.youtube.com/watch?v=spsnQWtsUFM
或甚至youtube.com/watch?v=spsnQWtsUFM
,上面的正则表达式将无法正常工作!
编辑2:对不起,我没有意识到你试图在整个测试中替换所有字符串.在这种情况下,这应该按照你想要的方式工作:
$str = preg_replace('#(\A|[^=\]\'"a-zA-Z0-9])(http[s]?://(.+?)/[^()<>\s]+)#i', '\\1<a href="\\2">\\3</a>', $str);
Run Code Online (Sandbox Code Playgroud)