如何在正則表達式中使用數組中的關鍵字來搜索文件。Perl:從數組中搜索關鍵字的文本文件
我想看看一個文本文件,看看是否和關鍵字出現在哪裏。有兩個文件keywords.txt
keyword.txt
word1
word2
word3
filestosearchon.txt
a lot of words that go on and one and contain linebreaks and linebreaks (up to 100000 characters)
我想找到關鍵字和匹配的位置。這適用於一個單詞,但我無法弄清楚如何迭代正則表達式上的關鍵字。
#!/usr/bin/perl
# open profanity list
open(FILE, "keywords.txt") or die("Unable to open file");
@keywords = <FILE>;
close(FILE);
# open text file
local $/=undef;
open(txt, "filetosearchon.txt") or die("Unable to open file");
$txt = <txt>;
$regex = "keyword";
push @section,[length($`),length($&),$1]
while ($txt =~ m/$regex/g);
foreach $element(@section)
{
print (join(", ",@$element), $regex, "\n");
}
我該如何迭代循環中的關鍵字來獲取匹配的關鍵字和位置?
欣賞anyhelp。要做到這一點感謝
如果你只需要匹配關鍵字全字.txt反對filestosearch.txt中的整個單詞,您可能不需要正則表達式。我只是創建一個關鍵字作爲鍵和1作爲值的散列。然後嘗試查找散列中filestosearchon.txt中的每個單詞。如果查找成功,則會有匹配。 – 2012-04-22 19:04:20
@BrianSwift:可能不是最有效的解決方案,因爲它需要對每個關鍵字的字符串進行一次傳遞。有限自動機方法(即正則表達式)只需要一次通過。 – 2012-04-22 19:34:05
@ Li-aung Yip:我的方法只需要一次通過輸入字符串/文件將其解析爲單詞,並嘗試查找使用關鍵字作爲關鍵字的散列中的每個單詞。你的方法的好處是關鍵字可以是正則表達式,而不僅僅是固定的字符串。但是,使用正則表達式可能需要語法才能匹配整個單詞,以便「性別」與「misexplain」不匹配。 – 2012-04-22 20:32:03