.* 有什么作用?正则表达式实际上意味着什么?

2024-03-06

我使用 Perl 已有十年了。但最近我对使用 .* 感到困惑?正则表达式。

它似乎与最小字符数不匹配。有时它会给出不同的结果。

例如,对于此字符串:aaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmbaaaaaaaaaaaaaaaaaaaaab 和模式:a.*?b 它匹配两组中的完整输入字符串。根据定义,它应该与最后一个“ab”匹配。


它不会导致a.*?b匹配尽可能少的字符;它导致.*匹配尽可能少的字符。因为它只影响.*,它对已经匹配的内容没有影响(即通过a).

示例缩短为:

#01234
'aaab' =~ /a.*?b/

会发生什么:

  1. 在位置 0 处,a匹配 1 个字符 (a).
  2. 在位置 1 处,.*?匹配 0 个字符(空字符串)。
  3. 在位置 1 处,b无法匹配。 ⇒ 原路返回
  4. 在位置 1 处,.*?匹配 1 个字符 (a).
  5. 在位置 2 处,b无法匹配。 ⇒ 原路返回
  6. 在位置 1 处,.*?匹配 2 个字符 (aa).
  7. 在位置 3 处,b匹配 1 个字符 (b)
  8. 模式匹配成功。

正如您所看到的,它尝试匹配零个字符,这显然是最小的可能匹配。但整体模式在这样做时未能匹配,因此尝试越来越大的匹配,直到整体模式匹配为止。


我尽量避免使用非贪婪修饰符。

'aaab' =~ /a[^ab]*b/

If a确实是更复杂的东西,那么我们可以使用负前瞻。

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

.* 有什么作用?正则表达式实际上意味着什么? 的相关文章

随机推荐

  • 使用 prometheus 和 grafana 跟踪事件

    有一篇文章 跟踪每个版本 https codeascraft com 2010 12 08 track every release 它讲述了如何在每个代码部署的图表上显示一条垂直线 他们正在使用石墨 我想用 Prometheus 2 2 和
  • OpenCV 从 BGR 颜色转换为灰度时出错

    我正在尝试使用以下代码将图像从 BGR 转换为灰度格式 img cv2 imread path to image file gray cv2 cvtColor img cv2 COLOR BGR2GRAY 这似乎工作正常 我检查了数据类型i
  • 没有 php.ini 与brew

    我用brew安装了PHP7 它说 The php ini file can be found in usr local etc php 7 0 php ini 但我在那里什么也没看到 所以我确认了php fpm i Configuratio
  • 嵌入、嵌入高级或动态地图之间的区别

    我正在使用 Google Maps Javascript API 将地图添加到网站 现在 当谷歌改变他们的价格时 我不确定我的极限是多少 这site https cloud google com maps platform pricing
  • 如何刷新 DbContext

    我想刷新我的所有实体DbContext在没有重新创建它的情况下 我尝试了以下操作 但没有一个有意义 var context IObjectContextAdapter myDbContext ObjectContext var refres
  • 在 Windows 上构建 Boost

    我正在尝试使用 mingw 在 Windows 7 x64 机器上构建 boost 库 当我尝试运行 b2 时 b2 build dir C boost build toolset gcc with python 构建库时出现错误 Jamr
  • C# 在包含任何字符的设置中序列化 List 的方法 (Regex/xml)

    我正在寻找一种简洁 干净的方法将字符串列表存储到C 设置 http msdn microsoft com en us library aa730869 28VS 80 29 aspx文件 据我所知 您无法将 List 对象存储到这些设置中
  • SQL Server 2005中的连接错误

    我有一个问题 我运行应用程序 C 并收到错误 与网络相关或 发生特定于实例的错误 建立与 SQL 的连接 服务器 找不到服务器或 无法访问 验证 实例名称正确且 SQL 服务器配置为允许远程 连接 提供商 SQL 网络 接口 错误 26 错
  • 如何将 iMessage 扩展的 sqlite 存储文件下载到 MacBook

    我们正在开发 iMessage 扩展 它成功地使用了核心数据 我们需要评估 store sqlite 文件 但找不到它 我们尝试这样找到它 在 Xcode 中 窗口 gt 设备 In Installed Apps 选择我们的扩展 Downl
  • 如何使用 gmock 测试类是否调用其基类的方法

    class Foo public int x int y void move void class SuperFoo public Foo public int age void update SuperFoo update void mo
  • 自定义验证在版本 4.1.1 的联系表单 7 中不起作用

    我必须在联系表单 7 中制作一个带有自定义验证字段的表单 它不适用于联系表单 7 的最新版本 4 1 1 但适用于旧版本 我创建了一个用于从表单获取优惠券代码的字段 如果优惠券是从 HIP 开始的 我想验证该条目 我的代码如下 add fi
  • 如何“git pull”到非当前分支的分支?

    当你跑步时git pull on the master分支 它通常从origin master 我在另一个名为newbranch 但我需要运行一个执行以下操作的命令git pull from origin master into maste
  • 重新启动 kube-proxy 等待条件

    在 Windows 10 中运行 minikube start 时 出现以下错误 错误 重新启动集群时出错 重新启动 kube proxy 等待 kube proxy 启动以进行 configmap 更新 等待条件超时 请帮我解决给定的问题
  • Delphi DataSnap 框架向 JSON 消息添加内容

    我正在使用 Delphi XE DataSnap REST 服务器并尝试返回 JSON 序列化对象 我的方法返回给客户端的结果如下所示 type ServerMethodsUnit1 TJSONIssue id 1 fields FIssu
  • SyntaxError:解析错误仅发生在 safari 中

    我收到 SyntaxError Parse Error 仅在 safari 上 这是有问题的代码
  • MySql PHP 从逗号分隔的数据(标签)中选择不同值的计数

    如何从 MySql 中以逗号分隔值存储的数据中选择不同值的计数 最后我将使用 PHP 从 MySql 输出数据 里面有每个帖子的标签 所以最后 我尝试输出数据 就像 stackoverflow 处理标签的方式一样 如下所示 tag name
  • 将 setIcon 首选项设置为 ColorDrawable 在 Android 5.0 Lollipop 上不起作用

    在我的应用程序中 我使用以下行来区分一些首选项 preference setIcon new ColorDrawable color 在 Lollipop 之前的 Android 版本中 它工作正常 并且首选项显示所选颜色的方形图标 但在
  • 将共享库打包到 elf 中 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一个实用程序可以ALL精灵需要的SO将它们变成静态然后将精灵转换为SO的自由 以下是一些您可能会
  • 共享目标通用应用程序 Windows 10 方法

    我为此苦苦挣扎了几个小时 但找不到有效的解决方案 我的应用程序是共享的目标应用程序 问题是当它运行并且用户想要共享内容时 protected override async void OnShareTargetActivated ShareT
  • .* 有什么作用?正则表达式实际上意味着什么?

    我使用 Perl 已有十年了 但最近我对使用 感到困惑 正则表达式 它似乎与最小字符数不匹配 有时它会给出不同的结果 例如 对于此字符串 aaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmbaaaaaaaaaaaaaaaa