我的代码是:
$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
有时提取的链路在末尾也包含,
或'
或"
。如何摆脱这些?
如何从提取的链接中删除那些逗号、引号或双引号
可以使用(?<![,'"])
在末尾排除某些内容。但你的问题是,你根本不应该使用尾随字符类:
[^'w#$&+,'/:;=?@.-]
这就是"
和'
的匹配。
作为解决另一个问题的方法,第一个字符类可以添加一个空格。
['w#$&+,'/:;=?@. -]+
▵
如前所述,这可能不是一个好的解决方案,并可能导致其他不匹配。