(1) 何も含まない行、または仕様に一致しない行をスキップしたいというご要望を承りました。(2) セルの唯一のコンテンツである場合は、16 個の非スペース文字をキャプチャします。(3) リテラル パターン "user_id=" に続く 16 個の非スペース文字をキャプチャします。
スペース文字もキャプチャしても問題ない場合は、それらが " user_id=
" リテラルに続く場合は、適切な場所で に\S
変更できます。.
私のソリューションでは、Text::CSVを使用して、CSV ファイルの処理の詳細を処理します。これを行う方法は次のとおりです。
use strict;
use warnings;
use autodie;
use open ':encoding(utf8)';
use utf8;
use feature 'unicode_strings';
use Text::CSV;
binmode STDOUT, ':utf8';
my $csv = Text::CSV->new( {binary => 1} )
or die "Cannot use CSV: " . Text::CSV->error_diag;
while( my $row = $csv->getline( \*DATA ) ) {
my $column = $row->[0];
if( $column =~ m/^(\S{16})$/ || $column =~ m/user_id=(\S{16})/ ) {
print $1, "\n";
}
}
__DATA__
abcdefghijklmnop
user_id=abcdefghijklmnop
abcd fghij lmnop
randomdatAuser_id=abcdefghijklmnopMorerandomdata
user_id=abcd fghij lmnop
randomdatAuser_id=abcd fghij lmnopMorerandomdata
あなた自身のコードでは、ファイルハンドルを使用していないでしょうが、ファイルを開く方法はすでにDATA
知っていると思います。
CSV は一見シンプルな形式です。ただし、その高い可読性と構文解析の単純さを混同しないでください。CSV を扱う場合は、実証済みのモジュールを使用して列を抽出することをお勧めします。他のソリューションは、引用符が埋め込まれたコンマ、エスケープされたコンマ、アンバランスな引用符、および脳がその場で修正するその他の不規則性に失敗する可能性がありますが、純粋な正規表現ソリューションは脆弱になります.