在匹配字符串之前在变量上包含正则表达式

2024-01-04

我正在尝试查找并提取从文本文件中读取的单词在文本文件中的出现情况。到目前为止,我只能找到这个词何时被正确书写且未被修改(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);

预先感谢您的任何回复。

Edit:

可能的替换将由用户定义,并且必须将正则表达式设置为适合。用户可能会说常见的替换是将字母“a”更改为“@”甚至“1”。可能的改变是完全任意的。 当搜索特定单词(例如“Russian”)时,可以通过以下方式完成:

(m/russian/i); # would just match the word as it is
(m/russi[a@1]n/i); # would match the munged word

但如果我将要匹配的字符串存储在变量中,我不确定该怎么做,例如:

$stringToSearch = "russian";

这是一种全文搜索问题,因此一种方法是在匹配文档字符串之前对其进行规范化。

use strict;
use warnings;
use Data::Munge 'list2re';
...
my %norms = (
  '@' => 'a',
  '1' => 'i',
  ...
);
my $re = list2re keys %norms;
s/($re)/$norms{$1}/ge for @wordArray;

这种方法仅在任何给定单词只有一个可能的“规范化形式”时才有效,并且如果您的文档足够大并且每次搜索时都重新计算,那么效率可能比尝试搜索字符串的每个可能变体要低。 。

作为注释你的正则表达式m/$randomString/gi应该m/\Q$randomString/gi,因为您不希望 $randomString 中的任何正则表达式元字符以这种方式解释。请参阅文档引用元 https://perldoc.pl/functions/quotemeta.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在匹配字符串之前在变量上包含正则表达式 的相关文章

  • Boost 正则表达式:获取命名组

    如何使用 Boost 正则表达式获取与模式匹配对应的组名称 以下将输出与给定模式匹配的表达式 但是如何获取对应的命名组呢 boost regex pattern
  • 性能 - String.charAt(0) 与 /^.{1}/

    从概念上讲哪个应该更快 String charAt 0 or 1 regex String charAt 0 必须处理和应用正则表达式 速度测试资源 Paul S https stackoverflow com users 1615483
  • 在java正则表达式中获取组名

    我正在尝试接收模式和字符串并返回组名称 gt 匹配结果的映射 Example
  • PHP中用逗号分解复杂字符串

    我需要分割一个包含逗号的字符串 我已经找到了类似字符串的东西 str getcsv A B with a comma eh C 但我的字符串是这样的 例如值没有包含字符 A B one two C 我需要分解它并获得 array 3 0 g
  • 正则表达式:如何匹配所有大于 49 的数字?

    我对正则表达式有点陌生 正在为正则表达式的数量字段编写验证need要使用的 如何匹配所有大于或等于 50 的数字 I tried 5 9 0 9 但这只匹配 50 99 有没有一种简单的方法来匹配所有可能大于 49 的数字 仅使用整数 事实
  • 如何从 Python 列表中删除日期

    我有一个标记化文本列表 list of words 看起来像这样 list of words 08 20 2014 10 04 27 pm complet vendor per mfg recommend 08 20 2014 10 04
  • Java:正则表达式,其中每个字符出现0-1次

    Problem 匹配正则表达式的每个字符最多出现一次的单词 该单词必须具有一定的大小 例如 2 5 单词中必须有一个特定的字符 比方说字符 e 我有什么 word matches abcde 2 5 这将匹配字符 a b c d 和 e 出
  • 使用正则表达式抓取文本正文,排除特定条件

    我正在使用 Python 正则表达式来获取已解析电子邮件的正文 该正文可能不包含任何内容 也可能看起来像这样 一些连贯的句子 拉尔斯克法 ljkd 其他的东西 几行电子邮件签名等等 等等等等等等 我想要电子邮件正文中的所有内容 不包括签名行
  • php正则表达式删除数字

    我需要一个正则表达式来删除字符串中的数字 但不删除空格 我目前有 city location UK 0113 Leeds new york sip city 0113Leeds new york city preg replace a z
  • 如何比较两个文件中的多列并在找​​到匹配时从另一列检索相应的值

    我有两个文件 File1 txt 和 File2 txt 我需要将 File1 中的三列 1 2 和 3 分别与 File2 的 4 5 和 6 进行比较 如果找到匹配项 我想从 File2 的第 2 列中检索相应的值并将其粘贴到输出中 T
  • RewriteCond REQUEST_URI - ^ 未按预期工作

    我正在 codeigniter 中构建一个网站 我在 htaccess 文件中有一系列重写条件和规则 第一组规则根据 uri 的第一段打开或关闭 SSL 然后它再次循环 如果找到匹配项 则适当地重定向页面 如果没有匹配项 并且 uri 不以
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • Perl 中可以使用哪种语法糖来减少左/右值运算符与 if 语句的代码?

    那里有很多语句 因为 Perl 是一种非常甜蜜的语言 但任何语言中最常用的语句都是 if 语句和设置值的组合 我想我已经找到了很多 但仍然存在一些空白 最终 目标是不必多次编写变量名 这是我到目前为止所拥有的 r s r s unless
  • .htaccess 异常导致主目录出现问题

    这是我的目录结构 localhost or livehost app bootstrap public vendor code demo 这是我的 htaccess
  • Perl 和 Unix 如何以相同的顺序对 Unicode 字符串进行排序?

    我正在尝试获取 Perl 和 GNU Linuxsort 1 程序就如何对 Unicode 字符串进行排序达成一致 我在跑sort with LANG en US UTF 8 在Perl程序中我尝试了以下方法 use Unicode Col
  • 正则表达式匹配整个单词[重复]

    这个问题在这里已经有答案了 我在 stackoverflow 上看到了很多关于使用正则表达式进行全词匹配的例子 我有以下情况 我想用 www xyz com 替换 www abc com string RetVal I am going t
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 如何确保我的代码永远不会直接退出?

    eval require file subsequent code goes here If file包含一个exit语句 后面的代码就没有机会运行 如何解决以便后续代码始终有机会运行eval已经完成了 中止是不可能的exit call f
  • 检查条件并通过 Zend 中的 Regex 识别 url 中的模式

    我正在实现 Zend Regex 路由 并且必须对 url 执行多次检查 例如 如果这是我的网址 http localhost application public index php module controller action 这是
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望

随机推荐