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

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(使用前将#替换为@)

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

  • 使用解析将 ** 运算符更改为幂函数?

    我的要求是将 运算符更改为幂函数 例如 1 Input B 2 Output power B 2 2 B 2 T 2 X Output power B 2 我写了下面的正则表达式来解决这个问题 rx r a zA Z0 9 a zA Z0
  • 正则表达式接受 4 条规则中的 3 条

    我似乎无法让正则表达式正确满足以下要求 长度在 8 到 20 之间的字符串 必须包含至少 1 个大写字母字符 至少 1 个小写字母字符 以及至少 1 个数字或至少 1 个特殊字符字符 或两者 假设特殊字符仅限于包括 我最初是这样写的 A Z
  • 将上部字符转换为下部字符,将下部字符转换为上部字符(反之亦然)[重复]

    这个问题在这里已经有答案了 我需要将某些字符串中的所有较低字符转换为较高字符 并将所有较高字符转换为较低字符 例如 var testString heLLoWorld 应该 HEllOwORLD 转换后 在不保存临时字符串的情况下实现此目的
  • 使用正则表达式如何从十进制数中删除尾随零

    我需要编写一些正则表达式 它接受一个数字并删除小数点后的所有尾随零 语言是 Actionscript 3 所以我想写 var result String theStringOfTheNumber replace the regex 例如 3
  • .htaccess 异常导致主目录出现问题

    这是我的目录结构 localhost or livehost app bootstrap public vendor code demo 这是我的 htaccess
  • 正则表达式 '?' 的类似物(前一项可选)在T-SQL中像什么?

    我想知道 是否可以翻译包含 的正则表达式 前面的项目可选 在 T SQL LIKE 模式中 DB 端无需任何操作 例如 31 4 我可以将其分成几个子句 但如果正则表达式包含很多 这不太方便 LIKE不使用正则表达式 并且它使用的模式语言没
  • 没有特殊字符的密码验证器

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

    我遇到非贪婪正则表达式 regex 的问题 我已经看到有关于非贪婪正则表达式的问题 但它们没有回答我的问题 Problem 我正在尝试匹配 lol 锚点的 href Note 我知道这可以通过 Perl HTML 解析模块来完成 我的问题是
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • Vim 搜索模式,如果出现则删除到行尾

    我正在尝试在文本文件中搜索特定模式 如果出现这种模式 则意味着该行的其余部分不需要 因此可以删除 我尝试过使用以下命令 但到目前为止还没有成功 s pattern d g pattern d 如果有人有任何建议 他们将不胜感激 would
  • 如何检查php字符串是否只包含英文字母和数字?

    在 JS 中我使用了这段代码 if string match A Za z0 9 但我不知道如何在 PHP 中做到这一点 Use 预匹配 http php net manual en function preg match php if p
  • Python 正则表达式中的 \B+ 与 [\B]+ 与 [^\b]+

    我在回答 SO 问题时遇到了一个我不明白的问题 我创建了一个简化的示例来说明该问题 场景 我正在测试两个标记 不是随机的英语单词 在字符串中至少相距一定距离 在这个例子中 我们有一个动物列表 我们要确保在羊和狼之间至少还有其他三种动物 否则
  • 用于验证 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 现在
  • 如何在Python字符串中替换括号及其中的文本

    我有两个这样的字符串 string1 Today I went to the market to pick up some fruit string2 Today I went to school to learn algebra and
  • Laravel 验证规则仅针对字母

    我正在尝试添加验证规则以仅接受信件 我正在使用regex规则 但它仍然不起作用 下面是我的代码 Validate request input this gt validate request name gt required regex p
  • 删除PHP字符串中所有不匹配的字符?

    我有一个文本 我想从中删除所有不属于以下字符的字符 所需字符 0123456789 abcdefghijklmnopqrstuvwxyz n 最后一个是我确实想保留的 n 换行符 要匹配除列出的字符之外的所有字符 请使用反转字符集 http
  • Notepad++正则表达式,查找大写字母但忽略某些单词

    我想找到所有大写字母 但我需要忽略某些单词 字母 例如 I m Surprised I Myself I Am Excited 在这种情况下 我试图标记所有大写字母 但排除 2 个单独的大写字母I and I m 这是我的出发点 A Z I
  • 在 Python 中解析 TCL 列表

    我需要在双括号上拆分以空格分隔的 TCL 列表 例如 OUTPUT 172 25 50 10 01 01 Ethernet 172 25 50 10 01 02 Ethernet Traffic Item 1 172 25 50 10 01
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack

随机推荐

  • 是否可以在 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