特定の情報を含む特定のドキュメントをファイル システムで検索するクローラーを構築しています。ただし、正規表現の部分には少し困惑しています。デスクトップに 'teststring' とテスト クレジット カード番号 '4060324066583245' を含むテストファイルがあり、以下のコードは適切に実行され、以下を含むファイルが見つかりますteststring
。
require 'find'
count = 0
Find.find('/') do |f| # '/' for root directory on OS X
if f.match(/\.doc\Z/) # check if filename ends in desired format
contents = File.read(f)
if /teststring/.match(contents)
puts f
count += 1
end
end
end
puts "#{count} sensitive files were found"
これを実行すると、クローラーが機能しており、一致が適切に検出されていることが確認されます。ただし、テスト クレジット カード番号を検索するために実行しようとすると、一致するものを見つけることができません。
require 'find'
count = 0
Find.find('/') do |f| # '/' for root directory on OS X
if f.match(/\.doc\Z/) # check if filename ends in desired format
contents = File.read(f)
if /^4[0-9]{12}(?:[0-9]{3})?$/.match(contents)
puts f
count += 1
end
end
end
puts "#{count} sensitive files were found"
4060324066583245
テスト ドキュメントに含まれているテスト データの一部としてrubular.com の正規表現をチェックしたところ、 Rubular は数値が正規表現と一致することを確認しました。要約すると:
- クローラーは最初のケースで動作し
teststring
ます - クローラーがファイル システムを適切にスキャンし、目的のファイル タイプのコンテンツを読み取っていることを確認します - Rubular は、正規表現がテスト用のクレジット カード番号と一致することを確認します
4060324066583245
- クローラーがテスト クレジット カード番号を見つけられません。
助言がありますか?Rubular で正規表現が機能していると表示されるのに、自分のマシンでスクリプトを実行するとスクリプトが機能しない理由がわかりません。