2011-11-22 49 views
1

我試圖讓64-birmingham簡單的正則表達式讓我想尖叫

... name="title" /> <link href="http://www.domain.com/cities/64/deals/147943-local-coupon-book" rel="canonical" /> <meta content="text/html; charset=utf-8" http-equiv="Content-type" /> <link href="/deals/images/mobile/apple-touch-icon.png" rel="apple-touch-icon" /> <link href="http://www.domain.com/cities/64-birmingham.atom" rel="alternate" title="Birmingham, AL" type="application/atom+xml" />... 

與此正則表達式

preg_match('#//www\.domain\.com/cities/(.+?)\.atom#is', $response, $slug); 

它保持回升64/deals/147943-local-coupon-book" rel="canonical" />

回答

2

你的模式,即使有+?,將開始第一www.domain.com/cities URL匹配,然後在第二,不同的URL的末尾一路通過.atom匹配。

'#//www\.domain\.com/cities/([^"]+?)\.atom#is' 

不同的模式會強制將包含一對雙引號內的匹配,防止匹配來自最字符串的猖獗。

0

默認情況下,正則表達式模式將獲得最長的字符串。你可以使用類似的東西:

#//www\.domain\.com/cities/([^\"]+?)\.atom#is 

改爲。

我所做的並不是用''來要求'任何'。除了雙引號之外,我要求提供任何內容。

0

嘗試,

$get = preg_match_all("|href=\"http://(.*?)/cities/(.*?).atom\"|", $response, $slug);

其中64伯明翰將$get[2][0];