2009-02-26 18 views
3

私は正規表現ではまったく役に立たないので、これは過去30時間にわたって私を悩ませています。私はこれをおそらく非常に単純なものとして投稿します。 PHPで単純な正規表現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> 

私は<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); 
+0

+1の代わりに(。*)を推奨し、代わりに排他的な文字クラスを使用することもできます。 – Tomalak

2

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

2

私が参考にしthis regular expression testerを発見しました。ここで

+0

:http://gskinner.com/RegExr/(Flashを実装する、インタラクティブおよびすべての) – Tomalak

+1

私のお気に入りは、ICGのテスターがあるhttp://rubular.com/ –

+1

であることは、このようになります。 .NETベース、RegExrはActionScript、RubularはRubyです。 OPがPHPを使用していることを考えると、おそらくPHPベースのテスターを推薦することがより有益でしょう。 http://www.google.com/search?q=PHP+regex+tester –

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>/';