web-dev-qa-db-ja.com

正規表現は任意の文字列のPowerShellに一致します

正規表現を知っているような気分であっても、いつも私を打ち負かすように見えます。

任意の文字列に一致する普遍的なパターンを探しています。これらのさまざまな命名規則をすべて処理する方法を見つけることができる唯一の方法は、さまざまな正規表現パターンを作成することでしたが、すべてのデータが取得されているかどうかもわからないため、手動でクロスチェックする必要がありますそれ。

私はちょうど2つの角括弧[]内にある可能性のあるものをピックアップしようとしています。

elseif($line -match "\[\w*\d*\]") {         
    $pars = $matches[0]
}
elseif($line -match "\[\d*\w*\]") {
    $pars = $matches[0]
}
elseif($line -match "\[\w*\d*_\w*\]") {
    $pars = $matches[0]
}
elseif($line -match "\[\w*\d*_*\w*-*\w*:*\w*\]") {
    $pars = $matches[0]
}            
elseif($line -match "\[\w*_*\w*_*\w*_*\w*_*\w*_*\w*-*\w*\]") {
    $pars = $matches[0]
}

私のやり方ではエラーは発生しませんが、潜在的に遭遇する可能性のあるすべての状況を処理できるかどうかはわかりません。このような大量のデータでは、手動で確認することはほとんど不可能です。

また、正規表現パターンを生成するための優れたユーティリティを知っている人は大歓迎です。私はあまり有用ではない正規表現テスターを見つけることができただけで、PowerShellでの正規表現についてはオンラインでのヘルプはほとんどありません。

15
Cole9350
$a = [regex]"\[(.*)\]"
$b = $a.Match("sdfqsfsf[fghfdghdfhg]dgsdfg") 
$b.Captures[0].value
21
JPBlanc

ではないブラケットであるすべてに一致します。ブラケット文字以外を含む文字クラスを作成します。

$line -match "\[[^\[\]]+\]"
7
Aaron Jensen

に焦点を当てる

「2つの括弧[]内にある可能性のあるものをすべて拾おうとしています。」

おもう - \[.*\]はあなたが探しているものです。

説明
サイス[および]には特別な目的があるため、\これらの文字の前。
.(ドット)は任意の文字を表し、
*は、前の文字の任意の数の繰り返しを表します。
ここで、前の文字は.、つまり.*は一般的な文字列を表します。

2