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

如何用Perl正则表达式提取行末方括号及内部内容?

问题分析与解决代码

现有代码的问题

  1. 正则表达式完全错误:m/[..]/是匹配任意两个字符的字符集(.在字符集里是普通字符),根本不是匹配方括号内容,这就是输出一堆.的原因。
  2. 未提取class名称:没有匹配行首的classX部分,无法生成期望的输出格式。
  3. 未输出结果:仅修改了变量但没有打印处理后的内容。
  4. 文件句柄使用不规范:旧式的FILE全局句柄不如词法句柄安全。

修正后的Perl代码

my $file = 'File1.txt';
# 使用词法文件句柄,更安全
open my $fh, '<', $file or die "无法打开文件: $!";

while (my $line = <$fh>) {
    chomp $line;
    # 跳过第一行的文件名
    next if $line eq 'File1.txt';
    
    # 匹配class名称和行末的方括号内容
    if ($line =~ /^(\w+)->.*\[([^\]]+)\];$/) {
        my ($class_name, $bit_content) = ($1, $2);
        print "$class_name bit = [$bit_content]\n";
    }
}
close $fh;

代码说明

  • 跳过无关行:用next跳过第一行的文件名,只处理有效数据行。
  • 正则匹配逻辑:
    • ^(\w+)->:捕获行首的class名称(如class1),确保只取最开头的标识。
    • .*:匹配中间所有内容,包括可能存在的中间方括号(比如sample1[1]),不影响后续匹配。
    • \[([^\]]+)\];$:锚定到行尾$,只匹配最后一组方括号及内容,[^\]]+确保只捕获方括号内的字符,不会误匹配中间的方括号。
  • 输出格式:直接按照期望的格式打印结果。

内容的提问来源于stack exchange,提问作者DM 256

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:05:16