tech.guitarrapc.cóm

Technical updates

PowerShellで正規表現を使って余計な0を取り除く

正規表現は偉大ですね。 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

となります。

まとめ

正規表現は奥が深い。