回答編集履歴

1

add

2015/09/17 04:27

投稿

ngyuki
ngyuki

スコア4514

test CHANGED
@@ -17,3 +17,95 @@
17
17
  }, $text);
18
18
 
19
19
  ```
20
+
21
+
22
+
23
+ ---
24
+
25
+
26
+
27
+ yuba さんの回答にコメントで突っ込んだのですが、次のように戻り読み言明 `(?<! ... )`と、独占的量指定子 `++` でもいけそうです。
28
+
29
+
30
+
31
+ ```php
32
+
33
+ $text = preg_replace('/http:\S++(?<!\.jpg)/', '<a href="$0">$0</a>', $text);
34
+
35
+ $text = preg_replace('/http:\S+\.jpg/', '<img src="$0">', $text);
36
+
37
+ ```
38
+
39
+
40
+
41
+ ---
42
+
43
+
44
+
45
+ あと、瑣末なことですが、jpg だけの置換で
46
+
47
+
48
+
49
+ ```php
50
+
51
+ $text = 'http://hoge.com/data/img/test.jpg
52
+
53
+ http://hoge.com/data/img/test.jpghoge
54
+
55
+ http://hoge.com/data/img/test.jpg';
56
+
57
+
58
+
59
+ $text = preg_replace('/http:\S+\.jpg/', '<img src="$0">', $text);
60
+
61
+
62
+
63
+ echo $text;
64
+
65
+ /*
66
+
67
+ <img src="http://hoge.com/data/img/test.jpg">
68
+
69
+ <img src="http://hoge.com/data/img/test.jpg">hoge
70
+
71
+ <img src="http://hoge.com/data/img/test.jpg">
72
+
73
+ */
74
+
75
+ ```
76
+
77
+
78
+
79
+ などと `.jpghoge` みたいなのにも引っかかるので、次のように先読み言明をした方が良いかも。
80
+
81
+
82
+
83
+ ```php
84
+
85
+ $text = 'http://hoge.com/data/img/test.jpg
86
+
87
+ http://hoge.com/data/img/test.jpghoge
88
+
89
+ http://hoge.com/data/img/test.jpg';
90
+
91
+
92
+
93
+ $text = preg_replace('/http:\S+\.jpg(?!\S)/', '<img src="$0">', $text);
94
+
95
+
96
+
97
+ echo $text;
98
+
99
+ /*
100
+
101
+ <img src="http://hoge.com/data/img/test.jpg">
102
+
103
+ http://hoge.com/data/img/test.jpghoge
104
+
105
+ <img src="http://hoge.com/data/img/test.jpg">
106
+
107
+ */
108
+
109
+ ```
110
+
111
+