2011-12-31 12 views
2

私は、Perlを使ってhtmlファイルを検索し、セミランダムな文字列を探して変数に格納したり、印刷したりしています。正規表現を使用してランダムな文字列のhtmlファイルを検索

ストリングがjpg画像の名前であり、常に6つの小文字が続く9桁のパターンに従う、すなわち

140005917smpxgj.jpg 

しかし、それは毎回ランダムです。私はPerlがこれを行うことができると確信していますが、私はちょっと混乱しています。

+0

タイトルと署名の投稿にはタグを付けないでください。 –

答えて

3

あまり複雑ではありません。エクステンション内のさまざまな帽子を気にすることができます。 JPG。それが問題であれば、拡張の前に(?i)を追加することができます。

また、部分的な名前を使用しないようにすることもできます。 9桁以上の一致を破棄します。それは(?<!\d)部分です:一致する桁の文字がないことを確認してください。

ETA:ikegamiのおかげで、複数の一致も抽出されるようになりました。

while (<>) { 
    for (/(?<!\d)([0-9]{9}[a-z]{6}\.(?i)jpg)/g) { 
     say; 
     push @match, $_; 
    } 
} 
+0

ヒント: '(?:^ | \ D)'は '(?<!\ d)'と書くことができます。 – ikegami

+0

ヒント:1行に複数のインスタンスを探すのと同じくらい簡単です。 'if(/.../){say $ 1; } 'to' for(/.../g){say $ _;} } '。 – ikegami

+0

@ikegami#2:これは良い見解です。私はそれを考えていたはずです。 #1:行がファイル名で始まる場合は、非数字を必要としません。しかし、はい、見た目の裏が働くでしょう。 – TLP

1

ソリューションの正規表現が\d{9}[a-z]{6}\.jpg

+1

期間を区切ります。 – gpojd

+0

@gpojd、あなたは "エスケープ"を意味します。私は修正を適用しました。 – ikegami

2

であるが、この正規表現を試してみてください:

/\b\d{9}[a-z]{6}\.jpg/ 
1

perldoc perlre

use warnings; 
use strict; 

while (<DATA>) { 
    if (/ ([0-9]{9} [a-z]{6} [.] jpg) /x) { 
     print "$1\n"; 
    } 
} 

__DATA__ 
foo 140005917smpxgj.jpg bar 
sdfads 777666999abcdef.jpg dfgffgh 

プリント:

140005917smpxgj.jpg 
777666999abcdef.jpg 
関連する問題