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

回答編集履歴

2

ちょうせい

2019/07/01 05:23

投稿

yambejp
yambejp

スコア117885

answer CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
 
9
9
  ```PHP
10
- $v1='!s:123:"abcde";';
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='!s:123:"abcde";';
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

2019/07/01 05:23

投稿

yambejp
yambejp

スコア117885

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';