我已使用此代码:
while (my $line = <IN>)
{
chomp $line;
if($line =~ /(.*?: )\{(.+)\}/)
{
my $value2 = $2;
my @values2 = split(/,/, $value2);
my $insertKeys;
my $insertValues;
foreach $data(@values2)
{
chomp $data;
my ($key, $value) = split(/:/, $data);
$key =~ s/"//g;
$value =~ s/"/'/g;
$insertKeys .= $key.',';
$insertValues .= $value.',';
}
输入:
&#34; actor_ip&#34;:&#34; 127.0.0.1&#34; &#34;注意&#34;:&#34;来自Git&#34; &#34;用户&#34;:&#34;用户名&#39; https&#34; &#34; user_id&#34;:null&#34;演员&#34;:&#34;用户名&#39; https&#34; &#34; actor_id&#34;:null&#34; org_id&#34;:null&#34; action&#34;:&#34; user.failed_login&#34; &#34; created_at&#34;:1412256345456789&#34;数据&#34;:{&#34; actor_location&#34;:{&#34; location&#34;:{&#34; lat&#34;:null &#34; LON&#34;:空}}}
输出:
KEYS:actor_ip,note,user,user_id,actor,actor_id,org_id,action,created_at,data,lon,
VALUES:&#39; 127.0.0.1&#39;,&#39;来自Git&#39;,&#39;用户名为&#39; https&#39;,null,&#39;用户名为&#39; https&#39;,null,null,&#39; user.failed_login&#39;,1412256456789,{&#39; actor_location&#39;,null
我想从输出中删除这两个键和值请让我知道如何在下面正则表达式
"user":"Username for 'https"
"data":{"actor_location":{"location":{"lat":null "lon":null}}}
答案 0 :(得分:0)
您只需要排除不需要的密钥:
if ($key !~ /^(data|user)$/)
{
$insertKeys .= $key.',';
$insertValues .= $value.',';
}
但是,更灵活的设计可能是将键/值对插入哈希:
my %params;
foreach $data(@values2)
{
chomp $data;
my ($key, $value) = split(/:/, $data);
$key =~ s/"//g;
$value =~ s/"/'/g;
$params{$key} = $value;
}
然后,随后用参数做任何你想做的事都很容易。
此外,您不显示您的DBI代码,但此代码建议您手动构建整个插入查询字符串。更安全(且设计更好)的方法是parameterized query。