laravel5 の勉強がてらソースを見ていて、何をしたいのかよくわからないところが
ありました。
vendor/laravel/framework/src/Illuminate/Support/Str.php
php
198 /** 299 * Cap a string with a single instance of a given value. 3100 * 4101 * @param string $value 5102 * @param string $cap 6103 * @return string 7104 */ 8105 public static function finish($value, $cap) 9106 { 10107 $quoted = preg_quote($cap, '/'); 11108 12109 return preg_replace('/(?:'.$quoted.')+$/u', '', $value).$cap; 13110 }
preg_quote($cap, '/') は、'/' および正規表現の特殊文字をすべてエスケープする。
http://php.net/manual/ja/function.preg-quote.php
正規表現の中の '?:' は、「値のキャプチャを行わない」
=パターンを見つけてもマッチさせない(無視する)ということ?
http://php.net/manual/ja/regexp.reference.subpatterns.php
/u は「UTF-8 として処理する」
http://php.net/manual/ja/reference.pcre.pattern.modifiers.php
ということのようです。
この finish() メソッドを使っている箇所を vendor/ 配下で grep してみましたが、
このラッパーであるヘルパー関数 str_finish() 以外は、残念ながら見つけられませんでした。
bash
1$ php artisan tinker 2Psy Shell v0.7.2 (PHP 7.0.11 — cli) by Justin Hileman 3>>> use Illuminate\Support\Traits\Macroable; 4=> null 5>>> $s = new Str; 6=> Illuminate\Support\Str {#675} 7>>> $s->finish("abc123[123][123]\[123\]/123/xyz", "[123]"); 8=> "abc123[123][123]\[123\]/123/xyz[123]" 9>>> $s->finish("abc123[123][123]\[123\]/123/xyz", "/123/"); 10=> "abc123[123][123]\[123\]/123/xyz/123/"
preg_replace() の replacement が '' なので、セキュリティがらみ(?)で
何らかのパターンを排除(削除)しようとしているのではないかとも思うのですが、
どういうケースでこれが役立つのか、おわかりの方がおられましたら教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/04 00:43
2016/10/04 00:54
2016/10/04 01:05