2012-03-10 3 views
0

私はPerlを学んでいるので、ログファイルを読むことができます。私はすべての行を検索し、各行の先頭に英数字の文字列とそれに続く;を探したい。Perl - regex - 文字列の後に ";"をつけて各行を読み込んで検索したい。

if ($line =~ /\S([a-zA-Z][a-zA-Z0-9]*)/) 

が、私は、これは間違っていると思う:

これは私が持っているものの一部です。

お知らせください。

+1

アルファベットの文字が '\ pを{アルファ}'です:

は、私のようなものを書くことが多いです。文字は '\ pL'または' \ p {letter} 'です。数字は '\ pN'または' \ p {数字} 'です。数字は '\ d'または' \ p {Nd} 'または' \ p {数字} 'です。 – tchrist

答えて

2

試してみてください。

if ($line =~ /^[a-z0-9]+;/i) { ... } 

^は、行の先頭に一致します。 +は1回以上一致します。 /iは大文字と小文字を区別しない検索を行います。

+1

優れた答えです。 – NewLearner

3

まだASCIIに感染している多くの人が0-9のA-Zを意味すると思うので、「英数字」は少し曖昧ですが、Perlはバージョン(Know your character classes under different semantics)によって異なると考えています。正規表現と同様に、あなたの仕事はあなたが望むものだけを含むパターンをデザインすることであり、あなたが望むものはすべて除外しません。

また、多くの人々は^を文字列の先頭に使用しています。これは、/mフラグがない場合と同じです。しかし、reモジュールはデフォルトのフラグを設定できるようになったので、他のプログラマが参考にしようとしているときのあなたの正規表現は、あなたの考えではないかもしれません。

my $alphanum = qr/[a-z0-9]/i; 
my $regex = qr/ 
    \A    # absolute start of string 
    (?:$alphanum)+ # I can change this elsewhere 
    ; 
    /x; 

if($line =~ $regex) { ... } 
関連する問題