使用正規表示式解析字串

通常,使用正規表示式解析複雜結構並不是一個好主意。但這是可以完成的。例如,你可能希望將資料載入到 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