如何解决与正则表达式链接的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&ap=1 blah\">www.facebook.com</a>
根本不起作用,因为它将链接周围的文本带走了。但是,如果有人仅评论链接,则效果很好。这是我将功能更改为此
preg_replace(\"#^(.*)//(.*)/(.*)$#\",\'<a class=\"bwl\" href=\"\\0\">\\2</a>\',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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。