6

PowerShell文字列がすべて小文字であるかどうかをテストできるようにしたい。

私は世界最高の正規表現猿ではありませんが、私はこれらの線に沿って試みてきました:

if ($mystring -match "[a-z]^[A-Z]") {
    echo "its lower!"
}

しかしもちろん、それらは機能せず、インターネットを検索しても私はどこにも行きません。これを行う方法はありますか(ループ内のすべての文字をテストする以外に)?

4

3 に答える 3

12

PowerShellはデフォルトで大文字と小文字を区別せずに一致するため、次の-cmatch演算子を使用する必要があります。

if ($mystring -cmatch "^[a-z]*$") { ... }

-cmatch常に大文字と小文字を区別しますが、-imatchは常に大文字と小文字を区別しません。

補足:あなたの正規表現も少し奇妙でした。基本的に、ここで提供したものが必要です。

  • 文字列の開始のアンカー^( )
  • 小文字のラテン文字の文字クラス[a-z]( )
  • 数量詞。文字クラスを少なくとも0回繰り返すように指示し、それによって必要な数の文字を照合します(*)。+代わりに、空の文字列を禁止するために使用できます。
  • 文字列の終わりのアンカー$( )。2つのアンカーは、正規表現が文字列内のすべての文字と一致する必要があることを確認します。使用するだけの場合[a-z]*、これは、少なくとも0小文字の文字列がどこかにあるすべての文字列と一致します。これはすべての文字列になります。

PS:ただし、Ahmadは、文字列が文字以外のもので構成されている可能性があり、文字列が文字のみで構成されていることを要求するのではなく、文字列内のすべての文字が小文字であることを確認したい場合は、文字クラスを反転する必要があります。次のようなものです。

if ($mystring -cmatch "^[^A-Z]*$") { ... }

文字クラスの^先頭にあるは、含まれていないすべての文字に一致するようにクラスを反転します。そのため、この正規表現は、文字列のどこかに大文字が含まれている場合にのみ失敗します。それでも、はまだ必要です。-cmatch

于 2010-01-20T01:36:01.250 に答える
8

テストが非常に単純な場合は、正規表現の使用を避けることができ、おそらく避けるべきです。

$mystring -ceq $mystring.ToLower()
于 2010-01-20T09:03:49.770 に答える
0

このパターンを試してください。これは、大文字以外のものと一致します。"^[^A-Z]*$"

これは、すべての文字が小文字である限り、文字列に他の項目を含めることを許可しながら、大文字に対してfalseを返します。たとえば、「helloworld123」は有効です。

スペースや数字などのない文字が厳密に必要な場合は、Johannesのソリューションが適しています。

于 2010-01-20T01:38:01.577 に答える