与正则表达式链接的PHP URL

| 我知道我已经在很多地方看到了这一点,但是我需要的东西与常规有所不同。可悲的是,当我在任何地方搜索它时,它都会被埋在帖子中,只是将链接变成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>
如果有帮助,这是我当前的PHP regex替换功能。
ereg_replace(\"[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]\", \"<a href=\\\"\\\\0\\\" class=\\\"bwl\\\" target=\\\"_new\\\">\\\\0</a>\", htmlspecialchars($body, ENT_QUOTES)));
说我对正则表达式完全不了解也可能会有所帮助。谢谢! 编辑:当我输入像这样的注释
blahblah https://www.facebook.com/?sk=ff&ap=1 blah
时,我得到的HTML像这样的
<a class=\"bwl\" href=\"blahblah https://www.facebook.com/?sk=ff&amp;ap=1 blah\">www.facebook.com</a>
根本不起作用,因为它将链接周围的文本带走了。但是,如果有人仅评论链接,则效果很好。这是我将功能更改为此
preg_replace(\"#^(.*)//(.*)/(.*)$#\",\'<a class=\"bwl\" href=\"\\0\">\\2</a>\',  htmlspecialchars($body, ENT_QUOTES));
    
已邀请:
        这是最简单,最干净的方法:
$str = \'http://www.youtube.com/watch?v=spsnQWtsUFM\';
preg_match(\"#//(.+?)/#\", $str, $matches);

$site_url = $matches[1];
编辑:我认为$ str首先已经被检查为URL,所以我省略了它。另外,我假设所有URL都将包含\'http:// \'或\'https:// \'。如果将网址格式设置为
www.youtube.com/watch?v=spsnQWtsUFM
甚至
youtube.com/watch?v=spsnQWtsUFM
,则上述正则表达式将无法正常工作! EDIT2:对不起,我没有意识到您正在尝试在整个测试中替换所有字符串。在这种情况下,这应该可以按照您想要的方式工作:
$str = preg_replace(\'#(\\A|[^=\\]\\\'\"a-zA-Z0-9])(http[s]?://(.+?)/[^()<>\\s]+)#i\', \'\\\\1<a href=\"\\\\2\">\\\\3</a>\', $str);
    
        我也不是正则表达式专家
^(.*)//(.*)/(.*)$
<a href=\"\\1//\\2/\\3\">\\2</a>
当我试图在程序员的记事本中用作查找和替换时,这就是对我有用的方法。 ^(。)//应该提取协议-在第二行中称为\\ 1。 (。)/应该提取所有内容,直到第一行-在第二行中称为\\ 2。 (。*)$捕获所有内容,直到字符串结尾。 -在第二行中称为\\ 3。 以后添加
^(.*)( )(.*)//(.*)/(.*)( )(.*)$
\\1\\2<a href=\"\\3//\\4/\\5\">\\4</a> \\7
这应该更好一些,但只会替换1个URL     
        \\ 0将替换为整个匹配的字符串,而\\ x(其中x是从1开始的0以外的数字)将根据匹配的字符串的每个子部分替换,这些部分将根据您括在括号中的内容以及排序的顺序组出现。您的解决方案如下:
ereg_replace(\"[[:alpha:]]+://([^<>[:space:]]+[:alnum:]*)[[:alnum:]/]\", \"<a href=\\\"\\\\0\\\" class=\\\"bwl\\\" target=\\\"_new\\\">\\\\1</a>
我还无法测试,所以请告诉我它是否有效。     
        我认为应该这样做(我还没有测试过):
preg_match(\'/^http[s]?:\\/\\/(.+?)\\/.*/i\', $main_url, $matches);
$final_url = \'<a href=\"\'.$main_url.\'\">\'.$matches[1].\'</a>\';
    
        我很惊讶没有人记得PHP的parse_url函数:
$url = \'http://www.youtube.com/watch?v=spsnQWtsUFM\';
echo parse_url($url, PHP_URL_HOST); // displays \"www.youtube.com\"
我想您知道该怎么做。     
        
$result = preg_replace(\'%(http[s]?://)(\\S+)%\', \'<a href=\"\\1\\2\">\\2</a>\', $subject);
    
        带有正则表达式的代码无法完全正常工作。 我写了这段代码。它更加全面,但是可以起作用: 在此处查看结果:http://cht.dk/data/php-scripts/inc_functions_links.php 请在此处查看源代码:http://cht.dk/data/php-scripts/inc_functions_links.txt     

要回复问题请先登录注册