パターンを思い付く都度に更新される予定。
目次
yyyy-MM-dd HH-mm-ssをyyyy-m-dに変換
s/(\d{4})-0?(\d{1,2})-0?(\d{1,2}).+/$1-$2-$3/
3桁区切りカンマ
s/(\d)(?=(\d{3})+(?!\d))/$1,/g
- 直後に\d{4}でなく、\d{3}のパターンのある\dをキャプチャし、カンマを付与
ネストプロパティの2段目(bar)以降を配列に置換
s/(?<=\$request->.+?)->((?<!\$request->)(?<=->)([a-z_]+))+/['$2']/gi
- まず
(?<=\$request->.+?)
はキャプチャされず、この次に->
があるのが前提、->は削除するので先読み・後読み・キャプチャはしない - 次に式などで文章が両辺にあることを考慮して、文字列内に
\$request->
が再度含まれないことを(?<!\$request->)
として条件にする- これを入れてないと一行中の一文と解釈されるので、別の文と解釈させるため
- 次にプロパティ名の前には
->
が来るので、それを(?<=->)
として条件付けする - 最後に
([a-z_]+)
でプロパティ名であろうものを指定する - 2-4の繰り返し(ルートにある2個目のカッコ)に対して置換を掛けることでプロパティ名を配列に置換できる
- 但し1で指定している
->
単体は繰り返し対象外なのに繰り返し適用されているが、この理由はよくわかってない- 恐らく単純に
(?<=\$request->.+?)
の後ろにある->
が全部消えている?
- 恐らく単純に
- まず
// source text
$request->foo
$request->foo;
$request->foo->bar;
$request->foo['bar'];
$request->foo->bar->fb->fBfb;
$arr = [
'bar' => $request->foo->bar
];
if ($request->foo->bar->fb= $request->foo->bar->fb) {
$request->foo->bar->fb = $request->foo->bar->fb;
}
// replaced text
$request->foo
$request->foo;
$request->foo['bar'];
$request->foo['bar'];
$request->foo['bar']['fb']['fBfb'];
$arr = [
'bar' => $request->foo['bar']
];
if ($request->foo['bar']['fb']= $request->foo['bar']['fb']) {
$request->foo['bar']['fb'] = $request->foo['bar']['fb'];
}
但しメソッドは対象外にしたい場合
s/(?<=\$request->.+?)->((?<!\$request->)(?<=->(?![a-z_]+\(\)))([a-z_]+))+/['$2']/gi
->
の後に来るメソッド構文を除外するために、(?![a-z_]+\(\))
を追加(?<=->(?![a-z_]+\(\)))
とすることで->
の後に来る(?![a-z_]+\(\))
を除外しつつ、->
の後に来る([a-z_]+)
をキャプチャできる
// source text
$request->foo
$request->foo;
$request->foo->bar;
$request->foo['bar'];
$request->foo->fooBar();
$request->foo->bar->fooBar();
$arr = [
'bar' => $request->foo->bar
];
if ($request->foo->bar->fb= $request->foo->bar->fb) {
$request->foo->bar->fb = $request->foo->bar->fb;
}
// replaced text
$request->foo
$request->foo;
$request->foo['bar'];
$request->foo['bar'];
$request->foo->fooBar();
$request->foo['bar']->fooBar();
$arr = [
'bar' => $request->foo['bar']
];
if ($request->foo['bar']['fb']= $request->foo['bar']['fb']) {
$request->foo['bar']['fb'] = $request->foo['bar']['fb'];
}