0

重複の可能性:
正規表現とリンクするPHPのURL

preg_replaceテキストブロック内のすべてのリンクを試しているので、それらは文字列に置き換えられます"<< IMAGE >>"

このテキストブロック内のすべてのリンクを一致させようとしています。

"Here we can see the chupacabra trying to eat http://somesite.com/img/chupacabra.jpg. 
look at the the snails somesite.com/img/snails.png"

私はこの正規表現を使用しています:

(https?:\/\/)?.*(jpg|png|jpeg|bmp|gif)

しかし、リンクの正確な文字列だけを選択することはできません。
私が必要なのはこれです:

「ここでは、チュパカブラが食べようとしているのを見ることができます http://somesite.com/img/chupacabra.jpgカタツムリを見てください somesite.com/img/snails.png。 」

regexpal.comでのテスト

4

1 に答える 1

4

2つの問題があります-最初の*は貪欲なので、多くの方法と一致します。2つ目は、。*にはURLに含まれていないスペースが含まれているため、正しいURLを取得できません。

最も簡単な解決策は、空白を除くすべてに一致する\Sを使用することです。

(https?:\/\/)?\S*(jpg|png|jpeg|bmp|gif)

より良い方法は、後ろ向きに?<=を使用するこれを使用することです

(?<= |^)(https?://)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(/\S*)\.(jpg|png|jpeg|bmp|gif)
于 2013-02-05T01:14:31.950 に答える