Perl DBI - 忽略输出中的几列

时间:2014-10-08 06:10:10

标签: perl dbi

我已使用此代码:

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}}}    

1 个答案:

答案 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