次のスニペットを検討してください。
"12-18" -Contains "-"
これはtrue
と評価されると思いますが、そうではありません。これは、代わりにfalse
に評価されます。なぜこれが起こるのかわかりませんが、実際はそうです。
これを回避するには、代わりにこれを使用できます。
"12-18".Contains("-")
これで、式はtrueと評価されます。
最初のコードスニペットがなぜそのように動作するのですか? -
には、-Contains
とうまく機能しない特別な何かがありますか? documentation はそれについて何も言及していません。
-Contains
演算子は部分文字列の比較を行わず、完全な文字列で一致する必要があり、コレクションの検索に使用されます。
リンクしたドキュメントから:
-Contains Description:包含演算子。 参照値のコレクションに単一のテスト値が含まれるかどうかを通知します。
指定した例では、1つの文字列アイテムのみを含むコレクションを操作しています。
リンクしたドキュメントを読むと、この動作を示す例が表示されます。
例:
PS C:\> "abc", "def" -Contains "def"
True
PS C:\> "Windows", "PowerShell" -Contains "Shell"
False #Not an exact match
あなたが望むのは -Match
演算子だと思います:
"12-18" -Match "-"
True
を返します。
重要:コメントおよび リンクされたドキュメント で指摘されているように、-Match
演算子は- 正規表現 は、テキストのマッチングを実行します。
-Contains
は実際にはコレクション演算子です。コレクションにオブジェクトが含まれている場合はtrueです。文字列に限定されません。
-match
および-imatch
は正規表現の文字列マッチャーであり、キャプチャで使用する自動変数を設定します。
-like
、-ilike
はSQLに似たマッチャーです。
like
を使用できます。
"12-18" -like "*-*"
またはsplit
の場合はcontains
:
"12-18" -split "" -contains "-"
like
が最適、または少なくとも最も簡単です。match
は、正規表現の比較に使用されます。