0
私は次のコードを持っている:のPowerShell:認識できないエスケープシーケンス
$BuildDetails = Get-Content "d:\BuildDetails.txt"
[regex]$BuildDetailsRY = '\bRY:\s+\K\S+'
[regex]$BuildDetailsRoY = '\bRoY:\s+\K\S+'
[regex]$BuildDetailsSP = '\bSP:\s+\K\S+'
[regex]$BuildDetailsRC = '\bRC:\s+\K\S+'
[regex]$BuildDetailsBranch = '\bBranch:\s+\K\S+'
$ReleaseYear = $BuildDetails | Select-String $BuildDetailsRY -AllMatches | Foreach-Object {$_.Matches} |
Foreach-Object {$_.Groups[2].Value}
Write-Host Release Year = $ReleaseYear
を、私はそれを実行すると、私は次のエラーを取得する: は、値を変換できません "\ BSP:\ S + \ K \ S +" を入力するには、「システム.Text.RegularExpressions.Regex "である。エラー: "構文解析" \ bSP:\ s + \ K \ S + " - エスケープシーケンス\ Kが認識されません。
これは、テキストは、それが中に見ているファイルである。
RY: 17
RoY: 2
SP: 0
RC: 1
Branch: $/Release/17.2.x
を私が行うには正規表現が例えばタイトルの後のデータを見つけることです欲しいです17
はい、あなたの正規表現が無効であるとのエラーメッセージがそれを反映しています。 '\ k'は山括弧と名前を必要とし、その名前の前の捕捉グループは名前付きの逆参照です(https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular)。 -expression-language-quick-reference)か、大文字ではないかもしれません。何を聞いていますか?あなたの '\ K'は何を一致させることを意図していますか?リテラルのバックスラッシュ-kでは '\\ K'を意味しますか? – TessellatingHeckler
@TessellatingHecklerテキストファイル内で何を検索しているかについて、さらに詳しく説明しました。私はテキストファイルで[リンク](https://regex101.com/)の正規表現をテストして、うまくいきます。 –
Regex101.comは便利ですが、4つの正規表現エンジン(PCRE - Perl Compatible Regex Engine、GoLang、Python、JavaScript)のみを処理します。 .Netは独自のregexエンジンとはまったく異なっています。基本は素晴らしいですが、PCREと.Netでは\ kが異なります。 http://regexhero.net/tester/やhttp://regexstorm.net/testerのようなものができます.Net regexes online - しかし、PowerShellは.Net regexを実行するので、あなたには同じことを教えてくれます。 – TessellatingHeckler