ページ

title

告発\金沢地方検察庁\最高検察庁\法務省\石川県警察御中
弁護士と裁判官が共同で確定させた傷害・準強姦被告事件判決の再捜査要請に係る石川県警察珠洲警察署提出書面の情報公開

殺人未遂事件幇助の被告訴人: 木梨松嗣弁護士(金沢弁護士会)、岡田進弁護士(金沢弁護士会)、長谷川紘之弁護士(金沢弁護士会)、若杉幸平弁護士(金沢弁護士会)
名誉毀損罪の被告訴人: モトケンこと矢部善朗弁護士(京都弁護士会)、小倉秀夫弁護士(東京弁護士会)
市場急配センター株式会社 石川県金沢市駅西本町5丁目10番20所在
作成管理者: 石川県鳳珠郡能登町字宇出津 廣野秀樹
金沢地方検察庁御中

2020年10月10日土曜日

* Powershellの-matchで文字列正規表現での部分文字列を取得,(?<>?)の名前付けではまったが理解が深まった

* Powershellの-matchで文字列正規表現での部分文字列を取得,(?<>?)の名前付けではまったが理解が深まった

:CATEGORIES: Powershell,正規表現

```
PS D:\> $str
2002-12-29_163215_告発事件一件記録(写真資料・撮影日時).jpg

PS D:\> $Str
2002-12-29_163215_告発事件一件記録(写真資料・撮影日時).jpg

PS D:\> $Str -match "_[^\.]+"; $Matches
True

Name Value
---- -----
0 _告発事件一件記録(写真資料・撮影日時)



PS D:\>
PS D:\> $str -match "(?_[^\.]+?)"; $Matches
True

Name Value
---- -----
name _告
0 _告



PS D:\> $str -match "(?_[^\.]+?)"; $Matches["name"]
True
_告

PS D:\> $str -match "(?_[^\.]+?)"; $Matches["fname"]
True
_告

PS D:\> $Str -match "_[^\.]+"; $Matches
True

Name Value
---- -----
0 _告発事件一件記録(写真資料・撮影日時)



PS D:\> $str -match "(?....-..-.._......?)"; $Matches["fname"]
True
2002-12-29_163215

PS D:\> $str -match "(?_[^\.]+)"; $Matches["fname"]
True
_告発事件一件記録(写真資料・撮影日時)

PS D:\> $Str -match "(?:....-..-.._......_)(.+)(?:\.jpg)"; $Matches
True

Name Value
---- -----
1 告発事件一件記録(写真資料・撮影日時)
0 2002-12-29_163215_告発事件一件記録(写真資料・撮影日時).jpg



PS D:\> $Matches[1]
告発事件一件記録(写真資料・撮影日時)

PS D:\>
```

 きっかけは,次のページの次のコードが気になり,調べたのが始まりでした。「"(?_[^\.]+?)"」では何度やってもうまく行かず,最長一致のはずの+が最短一致となっていました。

```
function script:makeFolderName($originalSatsueiDate){
$folderName = ""

if($originalSatsueiDate -eq $null -or $originalSatsueiDate.length -lt 1){
return $folderName
}

# yyyy.mm.ddを抽出しyyyy-mm-ddに変換
if($originalSatsueiDate -match "(?\d\d\d\d.\d\d.\d\d?)"){
$folderName = $Matches["SatsueiDate"].replace(":","-")
return $folderName
}else{
return $folderName
}
}

[source:] Exifの撮影日時からフォルダを作成して画像をコピーする - 管理人Kのひとりごと https://www.k-hitorigoto.online/entry/2017/09/23/124528
```

 疑問が解決できたのは次のページの次の部分になりますが,?を末尾につけて囲んだ場合の挙動は情報が見当たりませんでした。とりあえず,先頭にのみ?をつけた場合に,期待通りの結果が得られました。

```
(?subexpression)
キャプチャした部分式に名前を指定できる。

PS>"PowerShell" -match '(?o.e)r(?S.e)ll';$matches
True

Name                           Value
----                           -----
second                         She
first                          owe
0                              owerShell


PS>$matches.second
She

[source:] PowerShell: ◆正規表現の基礎<グループ化構成体> http://mtgpowershell.blogspot.com/2011/12/blog-post_23.html
```

0 件のコメント:

コメントを投稿