2009/12/03
-match演算子の意外(?)な使い方
PowerShellには色々な演算子がありますが、その中のひとつに、ある文字列が正規表現にマッチするかどうかを判定する-match演算子というのがあります。使い方は、
"文字列" -match "正規表現"
です。たとえば、文字列にGUIDが含まれるかどうかを調べるには
"これはGUIDを含む文字列です。771d8236-9cc9-46d0-b78c-571746f81393とかね!" -match "[A-Fa-f0-9]{8}\-[A-Fa-f0-9]{4}\-[A-Fa-f0-9]{4}\-[A-Fa-f0-9]{4}\-[A-Fa-f0-9]{12}"
とすると、Trueと表示されます。
ちなみに、一度-match演算子を使うと$matchesというHashtable型のシェル変数に、マッチ情報が入ります。この場合、$matches[0]にGUIDが入ります。サブ式を定義してある場合、$matches[1],$matches[2]...にそれらの値が入ります。ただし$matchesには最初のマッチ情報しか入らないので複数のマッチがある場合はあまり使えないです。素直に
$regex=[regex]"a" $regex.Matches("aaa")|ForEach{$_.value}
とかしたほうがいいです。
ところで、-match演算子の左辺には実は配列も指定できます。たとえば、
"aa1","aaa","2","b" -match "\d"
とすると、
aa1 2
と表示されます。\dは数字が含まれるという正規表現ですが、これを配列に対してかけると、True/Falseではなくマッチした配列要素を返します。これ、私知らなかったんです!なかなか便利だと思うのでぜひつかってみてください。なおこの場合$matchesには何も入りません。
元記事:http://blogs.wankuma.com/mutaguchi/archive/2009/12/03/183512.aspxプライバシーポリシー