9

以下の正規表現コードを使用して一致した2つのグループをキャプチャします。

[regex]$regex = "^([0-9]{1,20})(b|kb|mb|gb|tb)$"

$matches = $regex.match($minSize)

$size=[int64]$matches.Groups[1].Value
$unit=$matches.Groups[2].Value

私の問題は、大文字と小文字を区別しないようにしたいことと、正規表現修飾子を使用したくないことです。

.NETで正規表現オプションを渡すことができることは知っていますが、PowerShellで同じことを行う方法がわかりません。

4

5 に答える 5

12

プログラムで目的のメソッドを提供できるようにする静的[Regex]::Match()メソッドのオーバーロードがあります。[RegexOptions]

# You can combine several options by doing a bitwise or:
$options = [Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [Text.RegularExpressions.RegexOptions]::CultureInvariant
# or by letting casting do the magic:
$options = [Text.RegularExpressions.RegexOptions]'IgnoreCase, CultureInvariant'

$match = [regex]::Match($input, $regex, $options)
于 2018-09-14T16:55:16.673 に答える
7

代わりに-matchを使用してみてください。例えば、

$minSize = "20Gb"
$regex = "^([0-9]{1,20})(b|kb|mb|gb|tb)$"
$minSize -match $regex #Automatic $Matches variable created
$size=[int64]$Matches[1]
$unit=$Matches[2]
于 2012-10-19T15:25:21.587 に答える
6

代わりに、PowerShellの-match演算子を使用してください。デフォルトでは、大文字と小文字は区別されません。

$minSize -match '^([0-9]{1,20})(b|kb|mb|gb|tb)$'

大文字と小文字を区別する一致の場合は、-cmatchを使用します。

于 2012-10-19T15:23:42.693 に答える
2

タイプアクセラレータを使用した後[regex]、OptionsプロパティはReadOnlyであり、変更できません。ただし、RegexOptionsパラメーターを使用してコンストラクターを呼び出すことができます。

$regex = [System.Text.RegularExpressions.Regex]::new('^([0-9]{1,20})(b|kb|mb|gb|tb)$','IgnoreCase')

複数のオプションを渡すには、基になる値に対してビット単位または演算子を使用します。

$regex = [regex]::new('^([0-9]{1,20})(b|kb|mb|gb|tb)$',[System.Text.RegularExpressions.RegexOptions]::Multiline.value__ -bor [System.Text.RegularExpressions.RegexOptions]::IgnoreCase.value__)

しかし、単純な加算も機能するようです。

[System.Text.RegularExpressions.RegexOptions]::Multiline + System.Text.RegularExpressions.RegexOptions]::IgnoreCase

数値フラグ(35 = IgnoreCase = 1 + MultiLine = 2 + IgnorePatternWhitespace = 32)が指定されている場合でも機能しますが、列挙値に直接依存することは通常、ベストプラクティスではありません。

$regex = [regex]::new('^([0-9]{1,20})(b|kb|mb|gb|tb)$',36)
$regex.Options
于 2020-03-24T15:56:39.780 に答える
1

正規表現のようにモード修飾子を含めることもでき(?i)ます(cmatchは大文字と小文字を区別する一致を強制します):

PS H:\> 'THISISSOMETHING' -cmatch 'something'
False
PS H:\> 'THISISSOMETHING' -cmatch '(?i)something'
True
于 2016-04-05T12:13:31.530 に答える