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