grep 的贪婪行为

2024-05-22

我认为在正则表达式中,“贪婪”适用于量词而不是整个匹配。然而,我观察到

grep -E --color=auto 'a+(ab)?' <(printf "aab")

returns aab而不是aab.

这同样适用于 sed。 另一方面,在 pcregrep 和其他工具中,量词确实是贪婪的。 这是 grep 的特定行为吗?

注意:我检查了两个 grep (BSD grep) 2.5.1-FreeBSD 和 grep (GNU grep) 3.1


In 术语的描述matched https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_01_02,POSIX 规定

对匹配序列的搜索从字符串的开头开始,并在找到与表达式匹配的第一个序列时停止,其中“first”被定义为表示“在字符串中最早开始”。如果模式允许可变数量的匹配字符,因此从该点开始有多个这样的序列,则匹配最长的这样的序列。

这个说法清楚地回答了你的问题。字符串aab包含两个从与 ERE 匹配的相同位置开始的子字符串a+(ab)?;这些都是aa and aab。后者最长,因此匹配。

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

grep 的贪婪行为 的相关文章

随机推荐

  • 更新 Elm 中的记录

    注意 这是我第一次看到 Elm 上周我偶然了解到它的存在 当您更新记录时 您是真正更新记录还是只是创建新记录 gt bill name Nye age 57 name Nye gt bill age 22 age 22 name Gates
  • Python 单元测试:Nose 失败时重试?

    我有一个随机失败的测试 我想让它在发送错误消息之前重试多次 我将 python 与 Nose 一起使用 我写了以下内容 但不幸的是 即使使用 try except 处理 当第一次尝试测试失败时 Nose 也会返回错误 def test so
  • 在 PHP 数组定义中显示重复键警告

    下面的代码是否可以得到警告 error reporting E ALL s array a gt 1 a gt 1 var export s 你唯一的希望 除了count 你自己 是你的编辑足够聪明 可以突出显示拼写错误 此屏幕截图来自 P
  • 有没有办法让 VS2010 在我的方法中扩展或收缩 try 块?

    我的代码有很多 try catch finally 块 与我在 VS2010 中的方法不同 除了添加区域之外 我无法在开发时扩展或收缩这些区域来隐藏内容 try vm R vm Qu vm T vm D vm Fil vm Type vm
  • SwiftUI:如何让项目的拖放重新排序起作用?

    我有以下 SwiftUI 视图 struct ContentView View State var model Model var body some View ScrollView LazyVGrid columns columns sp
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 如何找出javascript中加载了哪些javascript?

    继另一个问题的评论之后 我问自己是否有办法获取页面上加载的所有 js 代码的列表 就像 Firebug 或 chrome Inspector 所做的那样 有没有一种纯javascript的方法 一种方法是抓取脚本标签 但这样你可能会错过动态
  • jRails 是 Rails + jQuery 必须的吗?

    我是rails新手 使用rails 2 3 10 并且想使用jquery 特别是jquery ui 该项目是一个全新的项目 我计划使用 jquery ui 中的一些小部件 如 datapicker 和 selectable 等 我听说可以安
  • Flutter 中 Android RecyclerView.SCROLL STATE IDLE 的等价物是什么

    Android 给出的滚动状态如下RecyclerView SCROLL STATE IDLE它告诉用户何时停止滚动 我找不到任何选择在颤动中Pageview or ListView滚动监听器 我的问题 我需要检测 PageView 中的向
  • 从 C# 中的 .NET SecureString 读取单个字符?

    WPF 的PasswordBox 返回一个SecureString 它对窥探者隐藏密码 问题是你最终必须获得密码的值 而我在网上找到的建议都涉及将值复制到字符串中 这会让你回到窥探者的问题 IntPtr bstr Marshal Secur
  • 对于调用另一个异步函数的异步函数,玩笑测试失败

    我正在尝试测试一个使用另一个异步函数返回的数据的异步函数 这是解释我的问题的代码 StudentInfo js export async function getData studentData imported from another
  • Intellij:在行注释中的双斜杠后添加空格

    Intellij IDEA 我使用的是版本13 中有没有一种方法可以自动在两个斜杠和文本之间添加空格以行注释 如果我输入 这是一条评论 我希望在运行代码重新格式化时得到以下信息 在 Windows 上按 Ctrl Alt L 这是一条评论
  • 将 rel="nofollow" 添加到 WordPress 帖子中的所有链接

    我想将 rel nofollow 添加到我的 WordPress 帖子中的所有链接 并且我希望能够拥有一个不会获得 nofollow 的链接列表 我已经尝试了很多 但我无法正确完成 因为我真的不能很好地理解正则表达式 所以我有字符串 tex
  • TideKit还在进行中吗?

    自 2014 年 9 月 29 日以来 我没有听到任何有关 TideKit 的消息 您能告诉我们该项目是否是还在进行中吗 希望很快能听到你的声音 是的 TideKit 仍在进行中 最新更新是在昨天 2015 年 1 月 27 日 您可以在以
  • 如何提高大规模数据帧上 lambda 函数的性能

    我有一个df超过数亿行 latitude longitude time VAL 0 39 20000076293945312500 140 80000305175781250000 1972 01 19 13 00 00 1 2000000
  • 来自 ajax 的 Bootstrap 表 json

    我有 ajax 和 bootstrap 表的问题 我有一个 ajax JSON 我用这个方法调用 document ready function ajax url php process php method fetchdata dataT
  • 切换按钮形状不变

    我正在尝试制作一个带有绿色背景的圆形切换按钮 我用了
  • 使用 Google Translate API 获取单词的发音

    我正在尝试将法语单词的发音保存到 wav 或 mp3 文件中 我想知道 Google Translate API 上是否有任何地方 因为它有发音功能 可以让我实现这个目标 其他库也可以工作 自从提出这个问题以来 从谷歌翻译中 抓取 MP3
  • 选择更新后不起作用

    我有一个选择的下拉菜单 我更改了选项内容并调用触发器选择 更新但选择不重建下拉列表 这是我更新的
  • grep 的贪婪行为

    我认为在正则表达式中 贪婪 适用于量词而不是整个匹配 然而 我观察到 grep E color auto a ab lt printf aab returns aab而不是aab 这同样适用于 sed 另一方面 在 pcregrep 和其他