久々に正規表現が分からなくて泣きそう。
「ドットを含む、ダブルクォーテーションに囲まれた文字列」の抽出はできなかったのですが、有無の確認まではできたのでメモっておきます。
やりたいこと
データはjson風。実態はText(←重要!)。
{ "group":"apple", "data":{ "page":1, "Name":"hoge.hoge", "value":12.33 } }, { "group":"banana", "data":{ "page":1, "Name":"fugafuga", "value":85.0 } }
こういう感じ。
実際にはtextデータのため、このデータが改行無くズラッと一行に並んだものが対象です。
このデータの中の、「hoge.hoge」のように、NameがKeyのvalueの中にドットを含むところだけをヒットさせたい。
ややこしいところ
- ダブルクォーテーションが大量にあるので、「.*?」等を使うと意図しない量の文字列がヒットしてしまう
- 他のValueには正しいドットがあるからヒットさせたくない
- 前後の文字列が繰り返し有りのため特定し辛い
つらい。
結局、やったこと
こちらのサイトさんに助けていただきました。
[正規表現] .*?は最短マッチではない - Qiita
"Name":"[^""]*\.
//もしくは
"Name":"[^""]*[.]
こちらで何とか対処。
最後の「\.」でヒットしたドットで検索が終わるので、上記のデータで言えば「12.」までしかヒットしません。
なので「12.33」を引っ張ることは結局できなかったのですが、今回は「ドットを含むValueが一つでもあるかどうか」を検索させたかったため、一応目的は達成しました。