我的代码是:
$rawhtml = file_get_contents( "site url" );
$pat= '/((http|ftp|https):\/\/[\w#$&+,\/:;=?@.-]+)[^\w#$&+,\/:;=?@.-]/i';
preg_match_all($pat,$rawhtml,$matches1);
foreach($matches1[1] as $plinks)
{
$links_array[]=$plinks;
}
在测试了几种情况后,我注意到该功能有一些“泄漏”。如果有空格,链接会被破坏。
例如,我在变量中有这个文本URL:
$rawhtml = " http://www.filesonic.com/file/2185085531/TEST Voice 640-461 Test Cert Guide.epub
"
结果应该是一行一行:
http://www.filesonic.com/file/2185085481/TEST Voice (640)+461 Test Cert Guide.pdf
但结果是
http://www.filesonic.com/file/2185085531/TEST
有时,提取的链接最后还包含,
或'
或"
。如何摆脱这些?
答案 0 :(得分:0)
如何从提取的链接中删除那些逗号,引号或双引号
可以使用(?<![,'"])
在最后排除某些内容。但问题是你根本不应该使用尾随字符类:
[^\w#$&+,\/:;=?@.-]
匹配"
和'
。
作为对另一个问题的一种解决方法,第一个字符类可以用空格进行扩充。
[\w#$&+,\/:;=?@. -]+
▵
如上所述,这可能不是一个好的解决方案,可能导致其他不匹配。