使用正则表达式解析字符串

通常,使用正则表达式解析复杂结构并不是一个好主意。但这是可以完成的。例如,你可能希望将数据加载到 hive 表中,并且字段用逗号分隔,但像 array 这样的复杂类型用“|”分隔。文件包含所有以逗号分隔的字段的记录,复杂类型在方括号内。在这种情况下,这个一次性 Perl 可能就足够了:

echo "1,2,[3,4,5],5,6,[7,8],[1,2,34],5" | \
    perl -ne \
        'while( /\[[^,\]]+\,.*\]/ ){
            if( /\[([^\]\|]+)\]/){
                $text = $1;
                $text_to_replace = $text;
                $text =~ s/\,/\|/g;
                s/$text_to_replace/$text/;
            }
        } print'

你想要检查输出:

1,2,[3 | 4 | 5],5,6-,[7 | 8],[1 | 2 | 34],5