在链接中获取uniqe值php不起作用

在链接中获取uniqe值php不起作用,php,regex,arrays,Php,Regex,Arrays,我有一个文本字符串,然后用php正则表达式从中获取URL。可以有任意数量的链接,所以我使用 preg_match_all 问题是,出于某种原因,当我加入一个链接时,它认为有3个。当我使用数组唯一性时,它会过滤掉中间值,但不会过滤掉最后一个值 下面是代码 $bodyMessage = imap_body($hMail,$idxMsg); $bodyMessage = quoted_printable_decode($bodyMessage); preg_match_all('((htt

我有一个文本字符串,然后用php正则表达式从中获取URL。可以有任意数量的链接,所以我使用

 preg_match_all
问题是,出于某种原因,当我加入一个链接时,它认为有3个。当我使用数组唯一性时,它会过滤掉中间值,但不会过滤掉最后一个值

下面是代码

 $bodyMessage = imap_body($hMail,$idxMsg);
 $bodyMessage = quoted_printable_decode($bodyMessage);

 preg_match_all('((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)', $bodyMessage, $matches, PREG_PATTERN_ORDER);
 $links = array_unique($matches[0]);
 print_r($links); 
print_r($links)的输出为:

它解析的电子邮件正文是:

 --20cf300e4d7d02c34004c55e1489 Content-Type: text/plain; charset=ISO-8859-1 @bill http://usnews.msnbc.msn.com/_news/2012/07/20/12861792-6-year-old-girl-confirmed-to-have-been-killed-in-colorado-theater-shootings?lite --20cf300e4d7d02c34004c55e1489 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable @bill 
有什么想法吗? 谢谢

编辑:

我按照建议进行了修剪,结果返回一个空数组

 function trims($l){
                    trim($l);   
                }
                $links = $matches[0];
                $trimmedLinks = array_map("trims", $links);
                $trimmedLinks = array_unique($trimmedLinks);
                print_r($trimmedLinks); // = Array ( [0] => ) 
编辑:

我认为这可能与从imap获取身体信息有关。当我从imap复制并粘贴文本字符串,并将其设置为$bodyMessage时,它就会工作。。。
建议?

你应该有这样的模式

((?:https?|ftp|gopher|telnet|file|notes|ms-help):(?:(?://)|(?:\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)
与非捕获组。若你们把?:放在括号里,你们将得到非捕获组。然后一个数组将是:

Array ( [0] => http://usnews.msnbc.msn.com/_news/2012/07/20/12861792-6-year-old-girl-confirmed-to-have-been-killed-in-colorado-theater-shootings?lite )

编辑:此问题的答案是改用imap_fetchbody

尝试在array_唯一之前修剪array_map。我的假设是endGood建议中的空格,但它只返回一个空数组。请参阅上面的编辑,您忘记了从函数返回结果:-)“返回修剪($l);”哦,哇。。。漫长的一天啊。但是仍然不起作用:(输出是:Array([0]=>[2]=>put示例有效。)这一个只是抛出错误:我更新了regex模式并得到了一个错误…“编译失败:在偏移量0处没有重复的内容”sry,试试这个:((?:https?;ftp?;gopher | telnet | file | notes | ms-help):(?:(?:/)(?:\)+)++[\w\d:\)%/-*)所以你有一个大的组,它捕捉到一个链接;-)当我打印时,仍然返回多个完全相同的元素($matches[0])如果我做唯一的数组,那么我只得到索引0和2,但它们仍然是相同的,不确定你的评论是什么?
Array ( [0] => http://usnews.msnbc.msn.com/_news/2012/07/20/12861792-6-year-old-girl-confirmed-to-have-been-killed-in-colorado-theater-shootings?lite )