You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Perl提取双引号内的指定字符串存入数组,排除非双引号区域的匹配项

问题原因

你的现有代码存在两个核心问题:

  1. 正则表达式未匹配a_b.c后的[数字]后缀,也没有转义.、[这类正则元字符,无法命中目标格式
  2. 没有限定匹配内容必须被双引号完整包裹,也没有捕获目标字符串的逻辑

正确实现代码

use strict;
use warnings;

# 存储提取结果的数组
my @target_strings;

# 打开文件并增加异常处理
open my $file_handle, '<', 'P2.txt' or die "打开文件失败: $!";

while (my $line = <$file_handle>) {
    # 全局匹配双引号内的a_b.c[数字]格式字符串
    while ($line =~ /\"(a_b\.c\[\d+])\"/g) {
        # 将捕获到的目标内容存入数组
        push @target_strings, $1;
    }
}

close $file_handle;

# 验证输出(按需使用)
foreach my $item (@target_strings) {
    print $item."\n";
}

正则说明

  • \" 匹配开头的双引号
  • ( 标记捕获组起始,组内内容就是我们需要的目标字符串
  • a_b\.c\[ 匹配固定前缀a_b.c[,其中.和[是正则元字符,必须加反斜杠转义才能匹配字面量
  • \d+ 匹配1个或多个数字,对应[]内的序号
  • \] 匹配字面量]
  • ) 标记捕获组结束
  • \" 匹配结尾的双引号
  • 末尾的g修饰符表示全局匹配,单行内存在多个符合条件的字符串也能全部提取

该实现只会匹配被双引号完整包裹的目标格式字符串,注释中未被双引号包裹的相同内容会被自动排除,符合需求。

内容的提问来源于stack exchange,提问作者Boggarapu Lokesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:54:01