Powershell 正規表現で桁数固定の文字列で上限を超えて入力できる場合の制限方法に関する情報です。
海外のサイトに情報がありました。
質問の抜粋です。
正規表現を使用してファイル内の特定の行を照合しようとしていますが、問題が発生しています。
ファイルには次のようなテキストが含まれています。
Mario, 123456789
Luigi, 234-567-890
Nancy, 345 5666 77533
Bowser, 348759823745908732589
Peach, 534785
Daisy, 123-456-7890
XXX-XXX-XXX または XXX XXX XXX のいずれかのパターンとして数字だけを一致させようとしています。私はいくつかの異なる方法を試しましたが、常に私が望んでいないことを期待しているか、すべてが間違っていると教えてくれます。
これを行うためにPowerShellを使用しています。
最初に私は試しました:
{$match = $i -match "\d{3}\-\d{3}\-\d{3}|\d{3}\ \d{3}\ \d{3}"
Write-Host $match}
しかし、私がそれを行うと、数字との長い強さに一致しますXXX-XXX-XXXXX。n が正確な量に一致すると何かを読んだので、それを試してみました...
{$match = $i -match "\d{n3}\-\d{n3}\-\d{n3}|\d{n3}\ \d{n3}\ \{n3}"
Write-Host $match}
それはすべてを偽りました...だから私は試しました
{$match = $i -match "\d\n{3}\-\d\n{3}\-\d\n{3}|\d\n{3}\ \d\n{3}\ \d\n{3}"
遅延量指定子も試しました?。{$match = $i -match "\d{3?}\-\d{3?}\-\d{3?}|\d{3?}\ \{3?}\ \{3?}"
Write-Host $match}
まだ偽...私が最後に試したのはこれでした...
{$match = $i -match "\d[0-9\{3\}\-\d[0-9]\{3\}\-\d[0-9]{3\}|\d[0-9]\{3\}\ \d[0-9]\{3}\ \d[0-9]\{3\}"<br>
Write-Host $match}
続いて、回答の抜粋です。
次のパターンでは、2 つの一致が得られます。
Get-Content .\test.txt | Where-Object {$_ -match '\d{3}[-|\s]\d{3}[-|\s]\d{3}'}
ルイージ、234-567-890
デイジー、123-456-7890最後の一致を除外する場合は、「$」アンカーを追加します (文字列の末尾を表します:
Get-Content .\test.txt | Where-Object {$_ -match '\d{3}[-|\s]\d{3}[-|\s]\d{3}$'}
ルイージ、234-567-890非常に具体的で、最初から最後まで行を一致させたい場合 (^ アンカーを使用して、文字列の開始を示します):
Get-Content .\test.txt | Where-Object {$_ -match '^\w+,\s+\d{3}[-|\s]\d{3}[-|\s]\d{3}$'}
ルイージ、234-567-890
「引用元」
終了を意味する「$」アンカーを追加することで、入力できる文字の上限を設定できます。