如何在Perl的正则表达式中使用命名后向引用到mach多次出现?

Beb*_*Pig 0 regex perl

我试图从JSON输出中删除所有数组中的数字的双引号.例如

["123","345","5567" ...]
Run Code Online (Sandbox Code Playgroud)

应成为:

[123, 345, 5567 ...]
Run Code Online (Sandbox Code Playgroud)

我可以使用以下内容找到数组部件:

/\[("(?<name>\d+)"[,]*)*\]/
Run Code Online (Sandbox Code Playgroud)

但是,我没有成功替换(?<name>\d+),$+{name}因为有多次出现$+{name}......有人可以解雇我吗?

TLP*_*TLP 5

您可以使用JSON模块将数据读入Perl数据结构,将字符串转换为数字,然后再次输出json:

use strict;
use warnings;
use Data::Dumper;
use JSON;

my $string = qq(["123","345","5567"]);
my $data   = from_json($string);

print Dumper to_json($data);   # datastructure before conversion
$_ += 0 for @$data;
print Dumper to_json($data);   # after
Run Code Online (Sandbox Code Playgroud)

输出:

$VAR1 = '["123","345","5567"]';
$VAR1 = '[123,345,5567]';
Run Code Online (Sandbox Code Playgroud)

当然,这仅适用于数字字符串,因此如果您的数字中包含非数字,则需要验证数据.