ウェブサイトからさまざまな種類の情報を取得する必要があります。フォーマットがこのようになっていることを知っています(すべて1行に):
"name":"BLAHBLAH","contact":{"phone":"12345","twitter":"BLAHBLAH"},
"location": "address":"NOTTELLING","lat":10,"lng":10,"postalCode":"1234",
"city":"BLAH","state":"BLAH","country":"BLAH"},
"categories":[{"id":"BLAH","name":"BLAH"}]
これらのプロファイルの中には、名前や都市などがないなど、1つまたは2つのブロックが欠落しているものがあります。次のようなコードを試しました。
#get name
$content =~ m!","name":"(.*?)","contact":!igs;
say ("name:", $1) unless ($1 eq '');
#get street
if ($content =~ m!\},"location":\{"address":"(.*?)","lat":!igs)
{say ("street:", $1) unless ($1 eq '');}
#get city
if ($content =~ m!,"city":"(.*?)","state":!igs)
{say ("city:", $1) unless ($1 eq '');}
#get state
if ($content =~ m!,"state":"(.*?)","country":!igs)
{say ("state:", $1) unless ($1 eq '');}
次に、繰り返しパターンを使用すると、
"city":"(.*?)","state":!igs
と
"state":"(.*?)","country":!igs)
結果は正確ではありません。(perlは、最初に「state」に到達した後、文字列を飛び越えていると思います)私の質問は、これがどのように発生するかということです。どうすれば修正できますか?