非锚定子字符串搜索:索引与正则表达式?

2023-12-27

我正在编写一些 Perl 脚本,需要进行大量字符串匹配。 例如:

my $str1 = "this is a test string";
my $str2 = "test";

要查看 $str1 是否包含 $str2 - 我发现有两种方法:

方法一: 使用索引函数:

if ( index($str1, $str2) != -1 ) { .... }

方法2: 使用正则表达式:

if( $str1 =~ /$str2/ ) { .... }

哪个更好?我们什么时候应该使用其中的每一个而不是另一个?


这是基准测试的结果:

use Benchmark qw(:all) ;
my $count = -1;
my $str1 = "this is a test string";
my $str2 = "test";
my $str3 = qr/test/;

cmpthese($count, {
    'type1' => sub { if ( index($str1, $str2) != -1 ) { 1 } },
    'type2' => sub { if( $str1 =~ $str3 ) { 1 } },
});

结果(当比赛发生时):

           Rate type2 type1
type2 1747627/s    --  -70%
type1 5770465/s  230%    --

为了能够得出结论,需要进行测试not匹配:

my $str2 = "text";
my $str3 = qr/text/;

结果(当没有匹配时):

           Rate type2 type1
type2 1857295/s    --  -67%
type1 5560630/s  199%    --

结论:

The index函数比正则表达式匹配快得多。

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

非锚定子字符串搜索:索引与正则表达式? 的相关文章

  • 使用 SIGINT 默认处理程序时从 system() 返回值

    我遇到了一些奇怪的返回值system 当子进程从终端接收到 SIGINT 时 解释一下 从 Perl 脚本parent pl I used system 运行另一个 Perl 脚本作为子进程 但我还需要通过 shell 运行子进程 所以我使
  • 将大写 URL 重定向为小写(*** 除外) - htaccess

    我正在尝试将大写 URL 重定向为小写 但有点噩梦 主要是我的 htaccess知识缺乏 目前我有
  • 为什么我只得到第一个捕获组?

    https stackoverflow com a 2304626 6607497 https stackoverflow com a 2304626 6607497 and https stackoverflow com a 370042
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 将字符串限制为逗号后 2 个数字且仅限 1 个逗号

    我有下面的脚本 只允许输入文本上的数字和逗号 function validate evt var theEvent evt window event var key theEvent keyCode theEvent which key S
  • Vim 搜索模式,如果出现则删除到行尾

    我正在尝试在文本文件中搜索特定模式 如果出现这种模式 则意味着该行的其余部分不需要 因此可以删除 我尝试过使用以下命令 但到目前为止还没有成功 s pattern d g pattern d 如果有人有任何建议 他们将不胜感激 would
  • hive regexp_extract 怪异

    我在 regexp extract 方面遇到一些问题 我正在查询制表符分隔的文件 我正在检查的列具有如下所示的字符串 abc def ghi 现在 如果我这样做 select distinct regexp extract name 0 f
  • Java中使用正则表达式确定字符串是否为URL [重复]

    这个问题在这里已经有答案了 可能的重复 检查字符串是否为有效 URL 的最佳正则表达式是什么 https stackoverflow com questions 161738 what is the best regular express
  • Pandas系列矢量化文本处理

    我想使用矢量化操作改进我的 Pandas 代码 假设我有一个简单的 DataFrame 其中有一个文本列 其中可能包含 url Column1 0 hello http www google com 1 bye www mail com w
  • 如何在Python中使用内联正则表达式修饰符[重复]

    这个问题在这里已经有答案了 我有一个正则表达式 n DOCUMENTATION n n n 2 s 女巫我正在尝试处理这样的一些文件 usr bin python coding utf 8
  • 删除emacs中多余的空行

    M x flush lines 删除缓冲区中的所有空白行 但是我只想删除多余的空白行 也就是说 如果有n个连续的空白行我想删除n 1并保留一个 我知道删除空白行可以完成该点下的空白行的工作 但是我想要一个适用于整个缓冲区的简单解决方案 有什
  • 用于验证 ip 列表中的 ip 范围的正则表达式

    我有正则表达式用于验证 50 个 ips 逗号分隔的列表 25 0 5 2 0 4 0 9 01 0 9 0 9 3 25 0 5 2 0 4 0 9 01 0 9 0 9 1 50 列表示例 10 10 10 1 127 0 0 1 现在
  • 正则表达式将从文本文件中提取句子

    我需要一个正则表达式来从文本文件中提取句子 示例文本 以 2004 年底发生的亚洲海啸灾难为例 对 Google 新闻 http news google com 的查询在一个月内 1 月 17 日 返回了超过 80 000 篇有关该事件的在
  • 数字和小数的输入掩码

    在测试我的程序后 我发现了以下错误 我在 sqlserver 中的表包含 价格数字 6 2 我的程序的用户输入价格 555 00 就很好了 但是当他输入 555555 时 这是错误的 所以我需要指定掩码 其中尾数是可选的 0 到 999 小
  • 是否有理由在 Perl 中使用 open(...) 的双参数形式?

    是否有任何理由使用双参数形式open 在 Perl 中而不是三个或更多参数的版本 我能想到的唯一原因是明显的观察结果 即两个参数的形式更短 但是假设冗长不是问题 是否有任何其他原因会让您选择双参数形式open 一参数和二参数 open 应用
  • 正则表达式,提取不在两个括号之间的字符串

    好的正则表达式问题 如何提取不在两个字符之间的字符 在本例中是括号 我有一个字符串 例如 字1 字2 字3 字 4 我只想获取第一个和最后一个 管道 而不是括号之间的第二个 管道 我已经尝试了无数次负克拉和负分组的尝试 但似乎无法使其发挥作
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过

随机推荐

  • Javascript:声明全局使用的函数的最佳方法?

    我的 javascript 文件变得相当大 3000 多行 我对如何布局我的文件和 delare 函数以便它们可以在文件中的任何位置调用感到困惑 总结一下我的 JS 文件目前看起来有点像这样 ALL GLOBAL VARIABLES FIR
  • SQL查询查找ID不在另一个表中的记录

    我在数据库中有两个具有绑定主键的表 我想在它们之间找到一个不相交的集合 例如 Table1 ID Name 1 John 2 Peter 3 Mary Table2 ID Address 1 address2 2 address2 那么我如
  • 异常断点 - LLDB 结果与 GDB

    我专门搜索了这个问题的主题 但没有找到任何与我的经历相近的内容 如果我忽略了答案 请原谅我 我熟悉 GDB 和异常点 断点等 但是下面的 GDB 与 LDB 调试测试让我没有得到合理的回应 全局测试值 Xcode 4 2 1 新的单一窗口项
  • Android推送通知-如何获取设备ID

    我陷入了使用 Google 云通知创建推送通知的过程 我正在做的是我应该获取设备的设备 ID 的部分 以便稍后当我需要发送推送通知时可以使用该设备 ID 所以我有这个代码 GCMRegistrar checkDevice this GCMR
  • 在 Android 中创建选项菜单

    我正在尝试在我的 Android 程序中创建选项菜单 我正在使用以下代码来扩展选项菜单 Override public boolean onCreateOptionsMenu Menu menu super onCreateOptionsM
  • 如何保存单选按钮的状态

    我制作了 4 个单选按钮 并希望在单击其中任何一个按钮时保存状态 然后希望在应用程序中使用该保存的状态 我该怎么做 myOption1 setChecked true myOption2 setChecked true myOption3
  • 将 char 数组转换为字符串

    如何使用 Arduino 将字符数组转换为字符串 char charArray String string String charArray This doesn t work String 类型的初始化与 C 构造函数类似 String
  • 您如何说服您的经理您的项目需要大规模重构? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我作为承包商加入了一个铁路项目 该项目已经进行了一年多 该代码由大约 10 名不同的开发人员编写 其中大多数也是承包商 他们有不同的代码风格 其
  • 将 `do` 表示法 `addStuff` 转换为 `>>=`

    向你学习 Haskell http learnyouahaskell com for a few monads more reader提出了addStuff功能 import Control Monad Instances addStuff
  • 确定红宝石的位置

    如何确定红宝石的位置 你可以试试 gem which rails 获取特定宝石的位置 或者 echo GEM HOME 获取您的宝石的主目录
  • 计算 JavaScript 对象中 true 的数量

    假设我有以下对象 items 1 true 2 false 3 true 4 true 我如何计算正确的数量 在本例中 这是一个返回数字 3 的简单函数 You can reduce物体的values 胁迫trues to 1并将它们添加到
  • Python elasticsearch.helpers.scan 示例

    有人可以提供 python elasticsearch helpers 客户端的扫描 API 示例吗 res elasticsearch helpers scan 如何使用 res 对象获取 elasticsearch 的所有结果 The
  • JavaScript 版本如何与 ECMAScript 版本关联?

    例如 map https developer mozilla org en JavaScript Reference Global Objects Array map是 在 JavaScript 1 6 中实现的 这是 ES5 方法吗 1
  • 如何使 JMX 自定义身份验证起作用?

    我在 JMX 上使用基于密码和访问文件的身份验证 在构建 JMXConnectorServer 时 我使用属性名称并且工作正常 Map
  • 如何在C#中获取HTTP Post数据?

    我正在使用 Mailgun API 有一个部分我需要向他们提供一个 URL 然后他们将通过 HTTP Post 一些数据给我 我提供这个网址 http test com MailGun Webhook aspx http test com
  • Android FM 信号强度

    我想知道 Android 中的 FM 收音机信号强度 为此我是否必须与硬件交互 或者有没有什么API可以直接给出信号强度的值 某些手机 提供 FM 收音机 不管怎样 你必须有一个内置的 FM 调谐器 收音机 为此我必须与 硬件与否 是的 当
  • Matlab OOP 从对象数组访问属性

    Matlab 新手来自 C C 我有一个对象数组 我试图访问数组中每个对象的值并将它们连接到一个变量中 Class sample properties GetAccess public SetAccess public ID Value e
  • 如果存在特定 cookie,则绕过 Akamai 的特定 URL

    如果存在指定的 cookie 即 如果用户登录到特定页面 我希望 Akamai 不缓存某些 URL 我们可以与 Akamai 合作吗 好消息是 我过去曾在 Top Gear 网站 www topgear com uk 上这样做过 其逻辑是
  • 缓存 [n async] 工厂方法的结果,前提是它不会抛出异常

    更新 在 usr 指出我错误地假设后进行了重大修改Lazy
  • 非锚定子字符串搜索:索引与正则表达式?

    我正在编写一些 Perl 脚本 需要进行大量字符串匹配 例如 my str1 this is a test string my str2 test 要查看 str1 是否包含 str2 我发现有两种方法 方法一 使用索引函数 if inde