正規表現は偉大ですね。 likeよりmatchが好きなPowerShellerです。 さて、今更ですがIPv4は4オクテットに分けられた文字列ですね。 このIPアドレス、時に頭に0が付いた変なアドレスを渡されることがごくまれにあります。例えばこう。
0192.010.000.105
今回は、この頭の0を取り除く方法を正規表現でやってみましょう。
192.10.0.105
ワンライナーで-replaceメソッドを利用する
PowerShellには、Stringに対する.replace() (like処理)と -replace (match処理) があるのは度々紹介してきたとおりです。 今回は正規表現で処理するので -replaceを利用します。
"0192.010.000.105" -replace '\b0+\B'
実行結果はこうです。
192.10.0.105
それぞれ何をしているか分解してみましょう。
\b
\bは、文字列の先頭or末尾にマッチします。 つまり次の判定がかかります。
PS> 0123 -replace "\b0" 123
しかし、これは判定がかかりません。
PS> 1023 -replace "\b0" 1023
0+
+は、直前にある部分正規表現の1回以上の繰り返しにマッチします。 つまり0がある場合にマッチとなります。よってこのように0がなくなります。
PS> '0102' -replace '0+' 12
\bと組み合わせることで頭の0のみに判定をかけるようになります。
PS> '0102' -replace '\b0+' 102
\B
\bが文字の戦闘は末尾に対して、\Bは単語の戦闘及び末尾以外にマッチします。つまりこうです。
PS> '0102' -replace '0+\B' 12
PS> '0102' -replace '0\B' 12
PS> '0102' -replace '\B0+' 012
まとめ
正規表現は奥が深い。