説明
javascriptで動作する正規表現の次のpowershellの例を考えてみましょう(または、http://www.pagecolumn.com/tool/regtest.htmで動作しました。正規表現グループの戻り値 $1 には、属性領域に値の部分文字列が含まれます2番目のオプションの ソーステキストを変更して、属性サブストリング内のアンダーバーも検出されることを示しました。
^.*?_0_[^_]*[_](.*?)(_0_|$)
例
$Matches = @()
$String = 'root_first_attributes_0_second_Attributes_ToVoteFor_0_third_attributes_0_third_name'
Write-Host start with
write-host $String
Write-Host
Write-Host found
([regex]'^.*?_0_[^_]*[_](.*?)(_0_|$)').matches($String) | foreach {
write-host "key at $($_.Groups[1].Index) = '$($_.Groups[1].Value)'"
} # next match
収量
皮切りに:
root_first_attributes_0_second_Attributes_ToVoteFor_0_third_attributes_0_third_name
31 = 'Attributes_ToVoteFor' にキーが見つかりました
概要
^
文字列の先頭から
.*?
到達する文字数が最小になるように移動する
_0_
最初の区切り文字
[^_]*
次に、アンダーバー以外の次の文字に移動します
[_]
最初のアンダーバーを読むまで
(.*?)
前にすべての文字をキャプチャして返す
(_0_|$)
次の区切り文字または文字列の終わり
エクストラクレジット
リスト内の X 番目のグループの属性フィールドをキャプチャするには、非貪欲な検索を非キャプチャ ブロックに続けてカウントすることにより、正規表現を変更できます。これらはwww.pcreck.com/JavaScript/advancedでテストできます。
^(?:.*?_0_){0}[^_]*[_](.*?)(?=_0_|$)
一致するfirst_attributes
^(?:.*?_0_){1}[^_]*[_](.*?)(?=_0_|$)
一致するAttributes_ToVoteFor
^(?:.*?_0_){2}[^_]*[_](.*?)(?=_0_|$)
一致するattributes
^(?:.*?_0_){3}[^_]*[_](.*?)(?=_0_|$)
一致するname