【发布时间】:2018-10-17 02:42:01
【问题描述】:
我正在尝试在文本文件中查找并提取从文本文件中读取的单词的出现。到目前为止,我只能找到单词何时正确写入而不是 munged(a 更改为 @ 或 i 更改为 1)。是否可以在我的字符串中添加正则表达式以进行匹配或类似的东西?到目前为止,这是我的代码:
sub getOccurrenceOfStringInFileCaseInsensitive
{
my $fileName = $_[0];
my $stringToCount = $_[1];
my $numberOfOccurrences = 0;
my @wordArray = wordsInFileToArray ($fileName);
foreach (@wordArray)
{
my $numberOfNewOccurrences = () = (m/$stringToCount/gi);
$numberOfOccurrences += $numberOfNewOccurrences;
}
return $numberOfOccurrences;
}
例程接收文件名和要搜索的字符串。例程 wordsInFileToArray () 只是从文件中获取每个单词并返回一个包含它们的数组。 理想情况下,我想一次性直接从文件中读取执行此搜索,而不是将所有内容移动到数组并遍历它。但主要的问题是如何将一些东西硬编码到函数中,让我能够捕捉到单词。
示例:我想从文件中提取两行。 示例.txt:
russ1@anh@ck3r
俄罗斯黑客
# this variable also will be read from a blacklist file
$searchString = "russianhacker";
getOccurrenceOfStringInFileCaseInsensitive ("example.txt", $searchString);
提前感谢您的任何回复。
编辑:
可能的替换将由用户定义,并且正则表达式必须设置为适合。用户可以说常见的替换是将字母“a”更改为“@”甚至“1”。可能的改变是完全任意的。 在搜索特定单词(例如“俄语”)时,可以使用以下方式:
(m/russian/i); # would just match the word as it is
(m/russi[a@1]n/i); # would match the munged word
但如果我将要匹配的字符串存储在变量中,我不确定该怎么做,例如:
$stringToSearch = "russian";
【问题讨论】:
-
用户选择的替换是全局的——它们适用于给定字符的每个出现,用任何词吗?如果不是(捕捉
h@cker会搞砸name@host.org?),用户提供修复(@a等)和它们适用的词(甚至那些他们被破坏了,所以要么hacker要么h@cker)?