2017-02-08 7 views
0

を使用して文字列の後に値を取得するにはどうすれば以下の文字列を持っている:perlのREG式

{\"id\":01,\"start_time\":\"1477954800000\",\"stop_time\":\"1485817200000\",\"url\":http:://www.example.com\} 

を、私は例えばSTART_TIME(14779.548億)の値を取得したいのですが。 https://regex101.com/でいくつか試しましたが、文字列と値の間に特殊文字(\ ":\")を扱う方法が見つかりませんでした。例えば、文字列がのstart_time =14779.548億
ようなものだった場合

は私が

start_time\":\"(\w+)/) 

を使用することによって、私は値を取得しますことを知っています。 \ ":\"が関係しているときに値を取得する方法については、

+0

@Wiktor Stribizewは、私はPerlの – dk13

+1

でコーディングしてるJSONのように見えます。なぜそれをjsonとしてデコードしないのですか? – Sobrique

+0

私は知っていますが、私はperl正規表現に慣れたいと思います – dk13

答えて

3

それはあなたがJSONパーサではない正規表現を使用する必要がありそうであるならばあなたのサンプルデータは、文字列化されたJSONオブジェクトを次のようになります。

#!perl 

use strict; 
use warnings; 

use feature qw(say); 
use JSON; 

my $json_string = <DATA>; 
chomp($json_string); 

my $json_object = decode_json $json_string; 

# get the value of the start_time key 
say $json_object->{start_time}; 
# 1477954800000 

__DATA__ 
{"id":1,"start_time":"1477954800000","stop_time":"1485817200000","url":"http://www.example.com"} 
+1

JSONエンコードされたデータ内にリテラルなJSON文字列(JSONデータを含む文字列)があります。それはすべての二重引用符の前にバックスラッシュを説明するでしょう。しかし、あなたの解決策は 's/\\"/"/ g"の直後でも有効です。 – SREagle

+0

'__DATA__'の仕組み(データの下にあるものはすべてリテラルデータです)のために少し変更しました。上記のコードが関数であって、あなたが "" \ "start \ time \":\ "1477954800000 \"、\ "stop_time \":\ "1485817200000 \"、\ "url \ :\ "http://www.example.com \"} "'それでも正しい結果が得られます。 –

+0

@SREagle正確な意味を理解できないため、正確なコマンドを入力することは可能ですか?申し訳ありませんが、私はこのことではかなり新しいです。 – dk13