検索・置き換え関系の区切りのスラッシュは別の記号も使えることがあるよというおはなし ひとりぷちアドベントカレンダー2017 09日目
たまにスラッシュ/
を一生懸命エスケープしているものを見かけるので、楽な方法もあるよというお話。
# 他に書こうとしていたことが間に合わなかったのでごまかしているだけとも言う
解決策
区切りに別の記号を使う事で/
のエスケープが不要になります。
たとえば区切りに#
をつかうと/
はそのまま、#
そのものはエスケープを利用して\#
となります。直近で使わない記号を使うと、余計なエスケープが不要になるのです。
この仕組みは、いくつかの場面で使えるので覚えておくと便利です。
例
vim
2017/12/09 :s#/#-#g
説明はこちら
:h E146
'/' でパターンと置換文字列を囲む代わりに、英数字や '\', '"', '|' 以外であれば、 他の1バイト文字を使うことができる。これは検索パターンや置換文字列に '/' を含む 場合に有益である。例 :s+/+//+
php
$date = '2017/12/09'; echo preg_replace('#/#', '-', $date), PHP_EOL;
sed
echo '2017/12/09' | sed 's#/#-#g' 2017-12-09
など。
終わりに
地味だけどこういう仕組みはありがたいですね。 スラッシュはどこでも使われているからエスケープだらけになりやすいです。