在 vim 的正则表达式引擎中,为什么有些元字符会被转义,有些则不会?

2023-11-25

为什么必须在正则表达式引擎中转义某些元字符,而不是其他元字符?例如:

/foo[1-9]*  

按预期工作,但正则表达式

foo[1-9]+  

必须表示为

/foo[1-9]\+  

在维姆中。有人知道吗?


This is because vim (actually vi) created their own regex flavor long before perl did. Even POSIX BRE and ERE came after vimwikipedia. They are still maintaining their own flavor so it's quite different.

为了使答案更加足智多谋,这里引用了ed's wiki.

该编辑器最初是用 PDP-11/20 汇编程序编写的1971作者:肯·汤普森。ed 的许多功能都来自 qed来自母校加州大学伯克利分校3Thompson 对 qed 非常熟悉,并在 CTSS 和 Multics 系统上重新实现了它。他的 qed 版本是第一个实现正则表达式的版本. 尽管正则表达式是 ed 的一部分,但它们的实现远不如 qed 中的通用。

ed 的各个方面继续影响 ex, 这反过来又催生了 vi。非交互式 Unix 命令 grep 的灵感来自 qed 和后来的 ed 的常见特殊用途,其中命令g/re/p 表示全局搜索正则表达式 re 并打印包含它的行。 Unix 流编辑器 sed 实现了 qed 的许多脚本功能,而 Unix 上的 ed 不支持这些功能。反过来,sed 影响了编程语言 AWK 的设计——它启发了 Perl 的某些方面。

这两段话的信息量很大!我希望我能大胆地做这一切。一些亮点,

  • 肯·汤普森写道ed1971年。ed实际上是重新实现qed.
  • Ken 在他的版本中添加了正则表达式qed这实际上是ed.
  • Inspired by ed, in 1976 William Joy (known as Bill Joy) wrote exwikipedia
  • Bill Joy in 1976 wrote vi as the visual mode for a line editor called ex wikipedia
  • grep受到特殊用途的启发qed然后ed.
  • sed已实现许多 qed 脚本功能,而 Unix 上的 ed 不支持这些功能
  • sed影响了设计awk.

所以 vi 正则表达式在ed它写于 1971 年。它早于任何其他正则表达式风格。

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

在 vim 的正则表达式引擎中,为什么有些元字符会被转义,有些则不会? 的相关文章

随机推荐

  • glDrawArrays 与 glDrawElements

    好吧 我仍然在努力让它发挥作用 我的代码的重要部分是 def init self vertices normals triangles self bufferVertices glGenBuffersARB 1 glBindBufferAR
  • Android:跟踪鼠标指针移动

    假设我使用通用鼠标 是否可以在android中跟踪鼠标指针的X和Y坐标 你需要一个OnGenericMotionListener OnGenericMotion MotionEvent me if me getToolType 0 Moti
  • 如何在Python脚本运行时操作图形?

    介绍 因为我来自matlab 我习惯了交互式界面 其中脚本可以在运行时更新图形 在处理过程中 每个图形都可以调整大小甚至关闭 这可能意味着每个图形都在自己的线程中运行 这显然不是这样的绘图库 IPython可以使用magic命令模仿Matl
  • Laravel 无法在 404 错误页面查看用户是否登录

    我创建了一个自定义 404 错误页面 并使用 app layout 来包装它 但这很奇怪 因为当我收到 404 错误页面时 即使我已登录 也会看到登录和注册链接 这是为什么 update 当我登录我的页面并写入不存在的路由时 我得到带有扩展
  • 使用 OpenCV 和 Python 查找数独网格

    我正在尝试使用 OpenCV 检测数独谜题中的网格 但我在最后一步中遇到了麻烦 我猜 我正在做的是 对图像进行下采样 Blur it 应用高通滤波器 双边 使用自适应阈值对图像进行阈值处理 一些膨胀和腐蚀 所有这些给了我以下图像 从现在开始
  • 无法找到哈希字符串“android-25”的目标

    我有 Android Studio 2 2 我正在尝试打开一个项目 但收到错误 无法找到带有哈希字符串 android 25 的目标 在错误消息下方 我看到一个链接 安装缺少的平台和同步项目 如果我单击此链接 我会收到另一个错误 其中显示
  • 使用 VBA 将条件格式应用于一系列单元格

    我想知道如何访问条件格式中标题为 适用于 的列并输入我自己的条件 我提供了一个屏幕截图以供更好的参考 我在条件格式中添加语法的代码是 With Selection FormatConditions Delete FormatConditio
  • 如何解析 Zend URL 中的参数?

    我正在尝试从 ZF REST URL 中提取 GET 参数 这不是当前请求 我不想调用 URL 或执行路由 我只需要参数 我正在寻找像 parse url 这样的实用函数 但适用于 Zend REST 格式 有没有 或者我必须重新发明轮子
  • 如何将我的 swift 1.2 项目迁移到 2.0?

    我有一个项目是在 swift 推出时开发的 但最近 Apple 推出了新版本的 swift 2 0 和 xCode 7 0 那么我如何将我的项目从 swift 1 2 迁移到 2 0 呢 在新的 Xcode 7 beta 中 转到编辑菜单
  • 为什么挑战-响应方法对于忘记密码来说不是一个糟糕的解决方案?

    我的公司正在开发在线人力资源和薪资应用程序 其中安全访问至关重要 我清楚如何锁定大多数身份验证 授权过程 但 忘记密码 页面除外 我最初的计划是要求用户输入电子邮件地址和对先前选择 输入的质询问题的答复 并将临时密码邮寄到列出的电子邮件 假
  • 如何解决:npm run build/dev: 缺少脚本?

    我正在尝试运行节点 但由于某种原因 节点的本地 npm 安装无法正常工作 包裹在那里 npm run dev npm ERR Darwin 15 4 0 npm ERR argv usr local Cellar node 5 6 0 bi
  • 什么取代了 .Net Core 中的 WCF?

    我习惯于创建 Net Framework 控制台应用程序并公开Add int x int y 使用类库 Net Framework 从头开始通过 WCF 服务实现功能 然后 我使用控制台应用程序在服务器内代理调用此函数 但是 如果我使用控制
  • 如何从 ASP.NET MVC 中的基本控制器连接通用代码

    我的 ASP NET MVC 应用程序是一个更大的 ColdFusion 应用程序的一小部分 该应用程序很快就会被完全替换 我通过 cookies 从 ColdFusion 部分传递一些参数 并且需要在运行每个操作之前检查此信息 如果信息丢
  • 将外部 jar 设置为 hadoop 类路径

    我正在尝试将外部 jar 设置为 hadoop 类路径 但到目前为止还没有运气 我有以下设置 hadoop 版本Hadoop 2 0 6 alpha 颠覆https git wip us apache org repos asf bigto
  • UIStoryboard 找不到带有标识符的视图控制器

    我有一个 ios 应用程序 使用带有一堆视图控制器的故事板 After Adding a new ViewController and configured the identify Storyboard ID 我尝试使用以下代码实例化新的
  • Vim - 删除直到行中最后一次出现字符

    我正在想办法dt or df字符串中最后一次出现的字符 例如 假设我有以下行 foo not relevant text bar If I f df 我预计会得到foo relevant text bar但我想得到foo bar Using
  • 提高 Pandas DataFrame 上的行追加性能

    我正在运行一个基本脚本 该脚本循环嵌套字典 从每个记录中获取数据 并将其附加到 Pandas DataFrame 中 数据看起来像这样 data SomeCity Date1 record1 record2 record3 Date2 它总
  • 将 RabbitMQ 的消息转换为 string/json

    我目前正在努力解决一个相当简单的问题 我想从 RabbitMQ 接收消息并将其转换为字符串 或稍后转换为 json 对象 但我得到的只是字节 The Message对象以这种方式将自身显示为字符串 Body cityId 644 ID nu
  • 添加超链接到闪亮图

    我制作了一个闪亮的应用程序 使用不同的绘图解决方案来渲染图表ggplot2关于闪亮 我最喜欢的是plotly 我喜欢用户可以与图表交互的事实 plotly用户可以放大图表或单击点 例如散点图 并访问它们的值 我想将散点图上的每个点链接到一个
  • 在 vim 的正则表达式引擎中,为什么有些元字符会被转义,有些则不会?

    为什么必须在正则表达式引擎中转义某些元字符 而不是其他元字符 例如 foo 1 9 按预期工作 但正则表达式 foo 1 9 必须表示为 foo 1 9 在维姆中 有人知道吗 This is because vim actually vi