2009-02-26 67 views
3

因爲我在正則表達式中完全沒用,而且這在過去的半個小時裏一直困擾着我,所以我想我會在這裏發佈它,因爲它可能很簡單。簡單的正則表達式PHP

<a href="/folder/files/hey/">hey.exe</a> 
<a href="/folder/files/hey2/">hey2.dll</a> 
<a href="/folder/files/pomp/">pomp.jpg</a> 

在PHP我需要提取<a>標籤例子之間有什麼:

hey.exe 
hey2.dll 
pomp.jpg 

回答

6

避免,即使你把它ungreedy,直到你有正則表達式的一些做法「*」。我覺得你不錯的解決辦法是:

'/<a[^>]+>([^<]+)<\/a>/i' 

注意「/」分隔符 - 必須使用正則表達式的功能預浸套件PHP。它應該是這樣的:

preg_match_all($pattern, $string, $matches); 
// matches get stored in '$matches' variable as an array 
// matches in between the <a></a> tags will be in $matches[1] 
print_r($matches); 
2

<a href="[^"]*">([^<]*)</a>

2

我發現this regular expression tester是有幫助的。

+0

更妙的是:http://gskinner.com/RegExr/(Flash實施,互動和所有) – Tomalak 2009-02-26 17:27:02

+1

我最喜歡的是http://rubular.com/ – 2009-02-26 17:30:04

2

這是一個非常簡單的:

<a.*>(.*)</a> 

但是,你要小心,如果你有在同一行,例如幾場比賽

<a href="/folder/hey">hey.exe</a><a href="/folder/hey2/">hey2.dll</a> 

在這種情況下,正確的正則表達式是:

<a.*?>(.*?)</a> 

注意 '?' '*'量詞之後。默認情況下,量詞是貪婪的,這意味着他們儘可能多地吃字符(這意味着在這個例子中它們只會返回「hey2.dll」)。通過添加一個引號,你可以讓他們不太懂,這應該更適合你的需求。

2

這似乎工作:使用

$pattern = '/<a.*?>(.*?)<\/a>/';