正则表达式:懒惰更糟糕吗?

2024-01-26

我一直这样写正则表达式

<A HREF="([^"]*)" TARGET="_blank">([^<]*)</A>

但我刚刚了解到这个懒惰的事 http://www.regular-expressions.info/examples.html我可以这样写

<A HREF="(.*?)" TARGET="_blank">(.*?)</A>

使用第二种方法有什么缺点吗?正则表达式肯定更紧凑(即使 SO 解析它更好)。

Edit:这里有两个最佳答案,它们指出了表达式之间的两个重要区别。 ysth 的答案指出了非贪婪/懒惰的弱点,其中超链接本身可能包含 A 标签的其他属性(绝对不好)。罗布·肯尼迪指出了贪婪示例中的一个弱点,即锚文本不能包含其他标签(绝对不行,因为它也不会捕获所有锚文本)......所以答案是,正则表达式就是它们的意思。是的,看似相同的惰性解决方案和非惰性解决方案在语义上可能并不等效。

Edit:第三个最佳答案是 Alan M 提出的关于表达的相对速度。目前,我将把他标记为最佳答案,以便人们给他更多积分:)


另一件需要考虑的事情是目标文本有多长,以及其中有多少内容将与量化子表达式匹配。例如,如果您尝试匹配大型 HTML 文档中的整个 元素,您可能会想使用以下正则表达式:

/<BODY>.*?<\/BODY>/is

但这会做很多不必要的工作,一次匹配一个字符,同时在每个字符之前有效地进行否定前瞻。您知道

在大多数情况下,您不会注意到贪婪量词和不情愿量词之间有任何速度差异,但需要记住这一点。您应该明智地使用不情愿的量词的主要原因是其他人指出的:他们可能不情愿地这样做,但如果这就是实现总体目标所需的,那么它们会比您想要的更多匹配。匹配。

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

正则表达式:懒惰更糟糕吗? 的相关文章

  • 使用 JavaScript 更改 HTML 内的日期格式

    我在页面上有以下代码 span class release date i class fa fa calendar i 2014 11 16 span This 2014 11 16是日期 由我的 CMS 自动生成 我需要更改这个日期 基本
  • 使用 Python 从网站下载所有 pdf 文件

    我遵循了几个在线指南 试图构建一个可以识别并从网站下载所有 pdf 的脚本 从而避免我手动执行此操作 到目前为止 这是我的代码 from urllib import request from bs4 import BeautifulSoup
  • preg_match 所有以@开头的单词?

    我对正则表达式不太确定 所以我不得不问你 如何用 PHP 判断字符串中是否包含以 开头的单词 例如我有一个像 This is for codeworxx 这样的字符串 我很抱歉 但我没有任何起点 希望你能帮忙 谢谢 萨沙 好的 谢谢你的结果
  • 如何使用 PHP 从内容中查找 URL?

    需要一个简单的 preg match 它将在内容中查找 c aspx 不带引号 如果找到 它将返回整个 url 举个例子 content div 4 a href m c aspx mt 01 9310ba801f1255e02e411d8
  • 你能挽救我的负面回顾示例来传达数字吗?

    在 高级正则表达式 一章中掌握 Perl http oreilly com catalog 9780596527242 我有一个损坏的示例 我无法找到一个很好的修复方法 这个例子可能为了自己的利益而试图变得太聪明 但也许有人可以帮我解决它
  • PHP URL 验证

    我知道有无数的线程问这个问题 但我一直无法找到一个可以帮助我解决这个问题的线程 我基本上试图解析大约 10 000 000 个 URL 的列表 确保它们根据以下标准有效 然后获取根域 URL 此列表包含您能想象到的几乎所有内容 包括类似的内
  • 如何在 jQuery 中将标题转换为 URL slug?

    我正在 CodeIgniter 中开发一个应用程序 我试图在表单上创建一个字段来动态生成URL slug 我想做的是删除标点符号 将其转换为小写 然后用连字符替换空格 例如 Shane s Rib Shack 将变成 shanes rib
  • REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除逗号

    我在 oracle 论坛网站找到了一个例子 输入字符串 a b c x y z a xx yy zz x WITH t AS SELECT a b c x y z a xx yy zz x col1 FROM dual SELECT t c
  • 如何检查号码是否是巴基斯坦用户的手机号码而不是固定电话号码

    我所做的是从开头删除 92 或 0092 并使用以下代码检查它是否是巴基斯坦人的有效手机号码 if preg match 3 0 4 0 9 number 1 Pakistani mobile number else not a pakis
  • 使用 posix shell 测试字符串中的正则表达式

    如何测试字符串是否与特定字符串匹配正则表达式与基本 无 bash 或任何其他 posix shell 脚本 在 if 语句中 您可以使用expr在 POSIX shell 中计算正则表达式的命令 s Abc expr s alpha 3 e
  • grep 两个分隔符之间的子字符串

    我有很多bash使用的脚本perl内的表达式grep为了提取两个分隔符之间的子字符串 例子 echo BeginMiddleEnd grep oP lt Begin End 问题是 当我将这些脚本移植到运行的平台时busybox 融合的 g
  • Pure Bash 替换捕获组

    我有这个示例字符串 test string 13A6 该字符 数字可以是从 0 到 9 以及从 A 到 F 我想要这个输出 1 3 A 6 我有这个工作 result echo test string sed s g 我想在没有 sed 的
  • RegularExpressionAttribute - 如何使其客户端验证不区分大小写?

    我有一个用于客户端验证的字符串 private const String regex b d 5 s s d 5 A Z 2 d 3 s s 1 d 3 s 我在我的中使用这个字符串 RegularExpression regex Erro
  • 删除字符串末尾的句点和数字

    如何删除尾随句点 后面紧跟一个数字 长度为一位或两位数字 例子 z lt c awe p 56 red 45 ted 5 you 88 tom 我只想删除 45和 5 你只需要一个简单的正则表达式 z new gsub 0 9 z 一些评论
  • Perl 正则表达式图灵完备吗?

    我见过 Ruby 和 Perl 程序员做了一些事情复杂的代码挑战 https codegolf stackexchange com questions 3596 regex validating regex完全用正则表达式 这前瞻和后瞻 h
  • 为什么这些非捕获正则表达式组不能正常工作?

    所以我花了很多时间在另一个堆栈溢出问题上 同样的问题又出现在上一个问题上 非捕获组并没有像我期望的那样工作 至少我是这么认为的 这是一个愚蠢的例子 类似于其他人的 CSS 测试字符串 这是我的正则表达式 rgb S 这是测试字符串 1px
  • 匹配所有有效格式 IPv6 地址的正则表达式

    乍一看 我承认这个问题看起来像是这个问题以及与之相关的任何其他问题的重复 匹配有效 IPv6 地址的正则表达式 https stackoverflow com questions 53497 regular expression that
  • 使用正则表达式搜索 Ruby 数组

    你好 我有一个小的 ruby 函数 它可以分割出一个 Ruby 数组 如下所示 def rearrange arr from to sidx arr index from eidx arr index to arr sidx arr sid
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • 正则表达式库基准

    我最近一直想知道正则表达式实现的性能 并且很难想出很多有用的信息 它很容易对浏览器 javascript 正则表达式性能进行基准测试 网上有很多工具 Chrome 和 Opera 中的 javascript 正则表达式实现几乎摧毁了所有其他

随机推荐

  • 是否可以在 Kotlin 中创建递归函数类型?

    我有代表流程中步骤的函数 每个函数还知道下一步 如果有的话 我希望能够做类似的事情 fun fooStep Step do something return barStep the next step is barStep 这些函数是从中央
  • 无法使用作为映射值传递的 Java SQL 语句对象访问临时表

    我的代码目前的工作原理与此类似 public void foo Statement st String sqlStr String tempTableName String aString foo tempTableName boolean
  • 如何独立测试模型的回调方法?

    我在模型中有一个方法 class Article lt ActiveRecord Base def do something end end 我还对该方法进行了单元测试 spec models article spec rb describ
  • 由志愿翻译人员本地化 Delphi 2009 应用程序的流程?

    我有一个免费的科学应用程序 近 100 个国家 地区的数千人正在使用该应用程序 许多人主动提出免费翻译 现在 D2009 使这变得更容易 通过集成和外部本地化工具 加上本机 Unicode 支持 我希望在几种语言中实现这一点 并稳步添加尽可
  • 当我想返回 ResultSet 时在哪里关闭 JDBC 连接

    看来ResultSet当我关闭时会自动关闭Connection 但我想归还ResultSet并在另一种方法中使用它 然后我不知道在哪里关闭Connection and PreparedStatement public ResultSet e
  • Python:类型错误:* 之后的参数必须是序列

    我有这段代码 我尝试在新线程中发送 UDP 数据报 import threading socket address localhost 9999 def send sock sock sendto Message address print
  • 找到具有相同索引节点的所有文件的最快方法是什么?

    我知道的唯一方法是 find home xdev samefile file1 但确实很慢 我想找到一个类似的工具locate 当你有很多文件时 真正的问题就出现了 我认为操作是 O n 没有来自的映射inode命名 唯一的方法是遍历整个文
  • 如何解决 Eclipse SVN 中的冲突

    在使用 Eclipse 进行编码并使用 SVN 作为团队存储库时 我在 Eclipse 中遇到冲突 假设我有冲突并且有 3 个自动生成的文件 解决冲突后 我找不到如何提交冲突解决方案并自动删除生成的文件的命令 在Eclipse之外的SVN中
  • 在 PHP 中附加 XML 节点

    大家好 有人可以帮我用 PHP 修改下面的 XML 文档吗 这个问题的主要原因是我想附加一个虚拟 XML 节点 其标签名称为Service到活动 gt gt 正文 gt gt 服务 gt gt 服务安装 下面是XML文档
  • 在单元测试中提取哈希种子

    我需要获取 python 用于复制的随机哈希种子failing单元测试 If Python哈希种子 https docs python org 3 using cmdline html envvar PYTHONHASHSEED被设置为非零
  • TS 2540:无法分配给样式,因为它是只读属性

    我正在创建一个textarea我的 TSX 标记中的元素 以及Vim 中的 TS 类型检查器 https github com neoclide coc nvim抱怨2540 Cannot assign to style because i
  • 仅第一个媒体查询工作

    使用媒体查询时 似乎只有第一组有效 我不知道为什么 如果我交换它们 那么仍然只有第一个有效 我尝试过从最大宽度更改为最小宽度 我尝试删除 and 条件 我尝试删除所有 Javascript 我尝试删除所有 CSS 只保留带有 body di
  • PowerShell Unicode 字符意外转换

    我有一个程序 它使用一些哈希表来解析信息 我遇到了一些关于外国字符的奇怪问题 下面是准确的表述 Props P1 Norte Americano e Ingl s Expressions E1 Props P1 Expressions E1
  • 什么是 Linux 本地定时器中断?

    一切都在标题中 欢迎任何优秀文档的链接 本地定时器中断是在 APIC 上实现的定时器 它仅中断特定的 CPU 而不是引发可由任何 CPU 处理的中断 Bovet 和 Cesati 的 Understanding the Linux Kern
  • 在 C# 中将 string.Empty 转换为(通用)T?

    我有一个实用方法 它从旧的返回强类型值 INI配置类型文件 带有签名 internal static T GetIniSetting
  • 使用 Google 登录,仅允许组织域帐户

    我正在尝试创建一个只能通过 Google 登录才能访问且只能使用 GSuite 组织域 的 Web 应用程序 我希望这样做 而不需要事先初始化允许哪些域 这意味着它允许在 Google 下注册的所有电子邮件地址 但不允许 gmail com
  • 发布到 azure 后,与 MVC4 捆绑不起作用

    您好 我正在尝试为我的应用程序捆绑我的脚本 我的调试正在工作 如果我使用 Web debug 发布 一切都会正常 但是当我使用 Web releases 发布时 我的脚本不会加载 一切都在本地运行 只有当我从 VS2012 发布到 Azur
  • Swift 3 - Firebase 推送通知,我该怎么办?

    我确实喜欢下面的 Swift 2 但它在 Swift 3 中不起作用 我该如何提供这个 如果有人解释一下那就太好了 didFinishLaunchingWithOptions let notificationSettings UIUserN
  • 如何使用ANTLR生成的语法文件?

    我认为这是一个愚蠢的问题 但我刚刚开始使用 ANTLR 我将他们教程中的 SimpleCalc 语法放在一起 并以 C 作为目标语言生成它 我得到了 SimpleCalcParser c h 和 SimpleCalcLexer c h 作为
  • 正则表达式:懒惰更糟糕吗?

    我一直这样写正则表达式 a href target blank lt a 但我刚刚了解到这个懒惰的事 http www regular expressions info examples html我可以这样写 a href target b