2013-10-23 41 views
-1

我试图从URL中提取一个ID(下面的'123456789'数字)。从字符串获取数字和html实体编号除外

例如这不起作用: https://www.facebook.com/pages/page-name%C3%A5rd/123456789

注意在URL '%C3%A5'。

但这个工程: https://www.facebook.com/pages/page-name/123456789

这是我使用的PHP:

if (strpos($url,'pages') == true) { 

    $page_id = preg_replace("/[^0-9]/","",$url); 

    } 
+0

定义什么是 “不工作” 的意思 – zerkms

+0

呵呵,有趣的是,该函数捕获字符串中的所有数字,包括'%C3%A5',我只想要数字'123456789'。所以一个数字必须紧挨着字符串中的至少3个数字。 – Kim

+0

是系列的数字总是在URL的末尾? – ajp15243

回答

1
$array = array(); 
if (preg_match('#pages/[^/]+/(\d+)#',$url,$array)){ 
    $page_id = $array[1]; 
} 

说明:我不知道Facebook的网址,究竟是如何工作的,但我以为你正在查看网址的子集 - 启动网页 - 并且数字部分实际上由/字符分隔。在我看来,这是一个比寻找3个以上数字更好的选择,这是一个任意的“反应”来寻找URL中的URL编码字符。

我认为你不能认为后面什么都没有,url参数在社交媒体网站中似乎很常见。

另一件事是,#作为我的经验在更广泛的现实生活中作为一个正则表达式“包装人物”,所以我建议默认使用这个,而不是在大多数例子中使用。此外,当我开始使用正则表达式时,我会经常尝试用一些字符覆盖一组字符。 ? - 任何字符,0或多次,非贪婪。我发现使用“不是那个字符模式”,在这种情况下[^ /] +(不是斜线)可以更可靠地工作。你可以用这个来匹配HTML标签以及:]>或HTML标签的属性:] “[^”]“[^>] *>

+0

谢谢,完美:) – Kim