匹配双引号、多个捕获组之间的所有内容
Match everything between double quotes, multiple capture groups
我正在尝试利用正则表达式来提取存在于配置文件每一行双引号之间的信息。我对一些基本级别的正则表达式没问题,但是当涉及到复杂的正则表达式时;尤其是涉及捕获组时,尽管我尝试通过 regex101.com.
进行测试和研究,但我仍然 运行 进入砖墙
my $text = '
"Key1" = { StuffIDontCareAbout = "Value1" },
"Key2" = { StuffIDontCareAbout = "Value2" },
"Key3" = { StuffIDontCareAbout = "Value3" },
"Key4" = { StuffIDontCareAbout = "Value4" },';
my %hash = undef;
for (split/\n/,$text) {
my $pattern = qr/(")(?:(?=\?)).)*?/;
$hash{} = if (/$pattern/);
}
print Dumper \%hash;
在regex101.com我关注的信息高亮显示;但是在我的 perl 脚本中 $1 = " & $2 = null.
我想我需要将引号与非捕获组匹配,以便第一个和第二个捕获组是它们之间的所有内容,但我无法弄清楚。
提前致谢。
如果可以 never 嵌套引号,永远不会,那么您可以匹配引号之间的一系列非引号字符,并“全局”执行此操作(/g
修饰符),因此字符串中的所有此类实例。一种方式
my %hash;
foreach my $line (split /\n/, $text) {
if (my ($key, $value) = $line =~ /"([^"]+)"/g) {
$hash{$key} = $value;
}
}
还有许多其他方法可以检查您是否有两个(恰好两个?)匹配项,并组织其余的处理。†
请注意,undef
不需要在变量声明时赋值给它,它什么也不做;一个新的 my
变量(未分配)是 undef
.
所有使用 $text
测试的代码都从问题中逐字复制。
†出于好奇,一行搞定
my %hash = map { /"([^"]+)"/g } split /\n/, $text;
这不是一个好的做法,因为我们不能在途中检查任何东西。
我正在尝试利用正则表达式来提取存在于配置文件每一行双引号之间的信息。我对一些基本级别的正则表达式没问题,但是当涉及到复杂的正则表达式时;尤其是涉及捕获组时,尽管我尝试通过 regex101.com.
进行测试和研究,但我仍然 运行 进入砖墙my $text = '
"Key1" = { StuffIDontCareAbout = "Value1" },
"Key2" = { StuffIDontCareAbout = "Value2" },
"Key3" = { StuffIDontCareAbout = "Value3" },
"Key4" = { StuffIDontCareAbout = "Value4" },';
my %hash = undef;
for (split/\n/,$text) {
my $pattern = qr/(")(?:(?=\?)).)*?/;
$hash{} = if (/$pattern/);
}
print Dumper \%hash;
在regex101.com我关注的信息高亮显示;但是在我的 perl 脚本中 $1 = " & $2 = null.
我想我需要将引号与非捕获组匹配,以便第一个和第二个捕获组是它们之间的所有内容,但我无法弄清楚。
提前致谢。
如果可以 never 嵌套引号,永远不会,那么您可以匹配引号之间的一系列非引号字符,并“全局”执行此操作(/g
修饰符),因此字符串中的所有此类实例。一种方式
my %hash;
foreach my $line (split /\n/, $text) {
if (my ($key, $value) = $line =~ /"([^"]+)"/g) {
$hash{$key} = $value;
}
}
还有许多其他方法可以检查您是否有两个(恰好两个?)匹配项,并组织其余的处理。†
请注意,undef
不需要在变量声明时赋值给它,它什么也不做;一个新的 my
变量(未分配)是 undef
.
所有使用 $text
测试的代码都从问题中逐字复制。
†出于好奇,一行搞定
my %hash = map { /"([^"]+)"/g } split /\n/, $text;
这不是一个好的做法,因为我们不能在途中检查任何东西。