php
1$replace_text = preg_replace_callback('/http:\S+/', function ($m) {
2 $url = $m[0];
3 if (preg_match('/\.jpg$/', $url)) {
4 return "<img src=\"$url\">";
5 } else {
6 return "<a href=\"$url\">$url</a>";
7 }
8}, $text);
yuba さんの回答にコメントで突っ込んだのですが、次のように戻り読み言明 (?<! ... )
と、独占的量指定子 ++
でもいけそうです。
php
1$text = preg_replace('/http:\S++(?<!\.jpg)/', '<a href="$0">$0</a>', $text);
2$text = preg_replace('/http:\S+\.jpg/', '<img src="$0">', $text);
あと、瑣末なことですが、jpg だけの置換で
php
1$text = 'http://hoge.com/data/img/test.jpg
2http://hoge.com/data/img/test.jpghoge
3http://hoge.com/data/img/test.jpg';
4
5$text = preg_replace('/http:\S+\.jpg/', '<img src="$0">', $text);
6
7echo $text;
8/*
9<img src="http://hoge.com/data/img/test.jpg">
10<img src="http://hoge.com/data/img/test.jpg">hoge
11<img src="http://hoge.com/data/img/test.jpg">
12*/
などと .jpghoge
みたいなのにも引っかかるので、次のように先読み言明をした方が良いかも。
php
1$text = 'http://hoge.com/data/img/test.jpg
2http://hoge.com/data/img/test.jpghoge
3http://hoge.com/data/img/test.jpg';
4
5$text = preg_replace('/http:\S+\.jpg(?!\S)/', '<img src="$0">', $text);
6
7echo $text;
8/*
9<img src="http://hoge.com/data/img/test.jpg">
10http://hoge.com/data/img/test.jpghoge
11<img src="http://hoge.com/data/img/test.jpg">
12*/
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/17 04:53
2015/09/17 04:58