回答編集履歴
2
ちょうせい
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
|
9
9
|
```PHP
|
10
|
-
$v1='
|
10
|
+
$v1='s:123:"abcde";';
|
11
11
|
$pattern='!s:(\d+):"(.*?)";!es';
|
12
12
|
$replacement="'s:'.strlen('$2').':\"$2\";'";
|
13
13
|
$v2 = preg_replace($pattern,$replacement , $v1);
|
@@ -15,7 +15,7 @@
|
|
15
15
|
```
|
16
16
|
↓↓↓
|
17
17
|
```PHP
|
18
|
-
$v1='
|
18
|
+
$v1='s:123:"abcde";';
|
19
19
|
$pattern='!s:(\d+):"(.*?)";!s';
|
20
20
|
$replacement=function($m){
|
21
21
|
return "s:".strlen($m[2]).":\"{$m[2]}\";";
|
1
chousei
answer
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
e修飾子の話ですよね?
|
2
2
|
|
3
|
+
考え方としては、
|
4
|
+
- コールバック関数を用意する(無名関数でOK)
|
5
|
+
- マッチ箇所をコールバック関数の引数で受ける
|
6
|
+
- コールバック関数からはreturnで戻す
|
7
|
+
|
8
|
+
|
3
9
|
```PHP
|
4
10
|
$v1='!s:123:"abcde";';
|
5
11
|
$pattern='!s:(\d+):"(.*?)";!es';
|