teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

add

2015/09/17 04:27

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -7,4 +7,49 @@
7
7
  return "<a href=\"$url\">$url</a>";
8
8
  }
9
9
  }, $text);
10
- ```
10
+ ```
11
+
12
+ ---
13
+
14
+ yuba さんの回答にコメントで突っ込んだのですが、次のように戻り読み言明 `(?<! ... )`と、独占的量指定子 `++` でもいけそうです。
15
+
16
+ ```php
17
+ $text = preg_replace('/http:\S++(?<!\.jpg)/', '<a href="$0">$0</a>', $text);
18
+ $text = preg_replace('/http:\S+\.jpg/', '<img src="$0">', $text);
19
+ ```
20
+
21
+ ---
22
+
23
+ あと、瑣末なことですが、jpg だけの置換で
24
+
25
+ ```php
26
+ $text = 'http://hoge.com/data/img/test.jpg
27
+ http://hoge.com/data/img/test.jpghoge
28
+ http://hoge.com/data/img/test.jpg';
29
+
30
+ $text = preg_replace('/http:\S+\.jpg/', '<img src="$0">', $text);
31
+
32
+ echo $text;
33
+ /*
34
+ <img src="http://hoge.com/data/img/test.jpg">
35
+ <img src="http://hoge.com/data/img/test.jpg">hoge
36
+ <img src="http://hoge.com/data/img/test.jpg">
37
+ */
38
+ ```
39
+
40
+ などと `.jpghoge` みたいなのにも引っかかるので、次のように先読み言明をした方が良いかも。
41
+
42
+ ```php
43
+ $text = 'http://hoge.com/data/img/test.jpg
44
+ http://hoge.com/data/img/test.jpghoge
45
+ http://hoge.com/data/img/test.jpg';
46
+
47
+ $text = preg_replace('/http:\S+\.jpg(?!\S)/', '<img src="$0">', $text);
48
+
49
+ echo $text;
50
+ /*
51
+ <img src="http://hoge.com/data/img/test.jpg">
52
+ http://hoge.com/data/img/test.jpghoge
53
+ <img src="http://hoge.com/data/img/test.jpg">
54
+ */
55
+ ```