为什么 $1 在 hashref 赋值中指向与多个正则表达式匹配的相同值?

2024-04-11

对于没有故事的问题,请跳到行后。

我正在把一串由一些字母和数字组成的字符串(这两种情况都可能出现)分成散列引用中的两个字段。仅当该字段存在时它们才应该出现。该字符串可能如下所示:/^\D*\d*$/, 例如ZR17, R15, -19, 22.

我不想简单地将其放入这样的两个变量中,因为实际的 hashref 有点长,而且我想将内容分组在一起。

my $asdf = "ZR17";
my ($x, $y) = $asdf =~ m/^(\D*)(\d*)$/;
my $foo = {
  foo => $x,
  bar => $y
};

如果我不想带钥匙foo如果是字符串17,我可以说:

my $foo = {
  ( $x ? ( foo => $x ) : () ),
  ( $y ? ( bar => $y ) : () ),
};

我想出了将所有内容都放在 hashref 赋值中,如下所示:

my $asdf = "ZR17";

my $foo = {
  ( $asdf =~ m/(\d+)/ ? ( foo => $1 ) : () ),
  ( $asdf =~ m/(\D+)/ ? ( bar => $1 ) : () ),
};

print Dumper $foo;

这会产生以下结果:

$VAR1 = {
          'bar' => 'ZR',
          'foo' => 'ZR'
        };

不知怎的,看起来只有一个$1在这里,它变得混乱了。如果我注释掉第二行,foo17.

有人能解释一下这里发生了什么吗?哪儿是$1迷路/困惑?


根据 perldoc (http://perldoc.perl.org/perlre.html http://perldoc.perl.org/perlre.html):

These special variables, like ... the numbered match variables ($1 , $2 , $3 
, etc.) are dynamically scoped until the end of the enclosing block or until 
the next successful match, whichever comes first.

因此,在 $asdf =~ m/(\d+)/ 之后,$1 已被覆盖为 17,因为它找到了匹配项,但尚未遇到封闭块的末尾。

然而,这

my $foo = {
  ( eval{$asdf =~ m/(\D+)/ ? ( bar => $1 ) : ()} ),
  ( eval{$asdf =~ m/(\d+)/ ? ( foo => $1 ) : ()} ),
};

由于范围是分离的,将给出预期的结果。

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

为什么 $1 在 hashref 赋值中指向与多个正则表达式匹配的相同值? 的相关文章

  • Unicode、正则表达式和 PyPy

    我写了一个程序来添加 有限 统一码支持 https stackoverflow com q 1832893 520779到 Python 正则表达式 虽然它在 CPython 2 5 2 上工作正常 但在 PyPy 上不起作用 1 5 0
  • 验证 Salesforce ID

    有没有办法验证 Salesforce ID 也许使用 RegEx 它们通常是 15 个字符或 18 个字符 但它们是否遵循我们可以用来检查它是否是有效 ID 的模式 验证 salesforce ID 有两个级别 使用正则表达式检查格式 a
  • 如何在 Perl 字符串中手动插入字符串转义符?

    在perl中假设我有一个像这样的字符串 hello tworld n 而我想要的是 hello world 也就是说 hello 然后是文字制表符 然后是 world 然后是文字换行符 或者等价地 hello tworld n 注意双引号
  • 版本差异? Java 中的正则表达式转义

    看来正则表达式转义在不同版本的 Java 中的工作方式不同 在 Java openjdk 16 0 1 中编译工作正常 在 Java openjdk 11 0 11 中抛出此编译错误 test java 15 error illegal e
  • 用于匹配某些数字的正则表达式

    以下正则表达式将匹配 9 11 位数字 d 9 11 编写完全匹配 9 的正则表达式的最佳方法是什么or11位数字 不包括10位 使用输入元素的模式属性 因此正则表达式应该匹配输入字段的整个值 我想接受任何包含 9 或 11 位数字的号码
  • .NET 正则表达式可匹配任何语言的任何类型的字母

    我可以使用哪种正则表达式来匹配 允许 任何语言的任何类型的字母 我需要匹配任何字母 包括任何变音符号 例如 并排除任何类型的符号 数学符号 货币符号 装饰符号 方框图字符等 和标点符号 我正在使用 ASP NET MVC 2 和 NET 4
  • 何时计划 (SELECT) 查询?

    在 PostgreSQL 中 什么时候计划 SELECT 查询 Is it 在报表准备时 或者 在处理 SELECT 开始时 或者 别的东西 我问的原因是 Stackoverflow 上有一个问题 相同的查询 两种不同的方式 性能截然不同
  • 用javascript检查瑞典语字符?

    如何重写此代码以检查所有字符 包括瑞典语 和 字符 alphaExp a zA Z 以上仅检查英文字母 瑞典语在 Z 之后包含 其余部分与英语相同 Thanks 你试过了吗 a zA Z 在我的火狐浏览器中 a zA Z test 评估为真
  • 使用带有字边界的 mgsub 函数作为替换值

    我试图用空格替换向量中字符串元素的子字符串 以下是我们正在考虑的向量 test lt c PALMA DE MALLORCA THE RICH AND THE POOR A CAMEL IN THE DESERT SANTANDER SL
  • Mongo 正则表达式用于“不匹配”或反向[重复]

    这个问题在这里已经有答案了 我的 mongo 文档都包含一个名为templateName 有一些包含该值的文档 a SystemDefaultTemplate b SystemDefaultTemplate c SystemDefaultT
  • 为什么 findall 在与组匹配时不返回整个匹配项? [复制]

    这个问题在这里已经有答案了 正如我读过的 dog cat food会寻找dog food and cat food但我无法用我的案例重现它 gt gt gt for m in re findall RA a zA Z0 9 RAJA4590
  • R strsplit:根据字符分割,除非后面有特定字符

    假设我有一个字符串向量 例如 split these c File Location C Documents File Location Pete s Computer File Location 我想根据 分割该向量中的每个元素 除非后面
  • 如何匹配撇号('),除非它被转义(\')?

    是否可以为此构造一个正则表达式 如果是这样 如果有人展示如何操作 我将不胜感激 使用这个正则表达式
  • 用于编辑 /etc/sudoers 文件的正则表达式模式

    我想删除 etc sudoers 文件中的 uncommnet 轮组 那么我应该使用什么正则表达式模式 cat etc sudoers Allows members of the sys group to run networking so
  • 从函数返回哈希值的最佳 Perl 实践是什么?

    我正在考虑将哈希引用传递给函数或从函数返回数据的最佳实践 一方面 仅将输入值传递给函数并仅返回输出变量似乎很直观 然而 在 Perl 中传递哈希值只能通过引用来完成 因此有点混乱 而且似乎更有可能犯错误 另一种方法是在输入变量中传递引用 但
  • 西班牙语单词的正则表达式是什么?

    正则表达式语言使用 B 来包含 A Z a z 0 9 和 并且 b 被定义为单词边界 如何编写匹配所有有效西班牙语单词 包括诸如 等字符 的正则表达式 我正在使用 NET 使用西班牙语区域设置并使您的正则表达式区域设置敏感
  • 用于验证 JSON 的正则表达式

    我正在寻找一个允许我验证 json 的正则表达式 我对正则表达式非常陌生 我知道用正则表达式解析很糟糕 但它可以用来验证吗 是的 可以进行完整的正则表达式验证 大多数现代正则表达式实现都允许递归正则表达式 它可以验证完整的 JSON 序列化
  • 正则表达式查找两个字符之间的内部匹配

    环境 Java 我想匹配两个字符串之间的字符 这是一个例子 foo
  • 正则表达式删除带有数字的单词

    我想删除产品名称中带有数字 参考 或小单词 2 个或更少字符 的单词 但我找不到好的正则表达式 一些例子 链式防回弹ECS 2035 应成为 链式防反弹 指南 35 厘米俄勒冈 Intenz 应该成为 俄勒冈州 Intenz 指南 Tron
  • 通过一个正则表达式以任意顺序匹配多个单词

    如标题中所述 我想要正则表达式 它将根据我的 查询 按顺序给出结果 line VERSION OTHER POWER LOW FREQ OFF MAXTUN BLER 示例1 re findall r FREQ VERSION line r

随机推荐

  • Python3.3 HTML Client TypeError: 'str' 不支持缓冲区接口

    import socket Set up a TCP IP socket s socket socket socket AF INET socket SOCK STREAM Connect as client to a selected s
  • Gradle 同步任务,同步到文件夹但忽略目标中的指定目录

    我想将驱动器上的一个文件夹与另一个包含我想要保留的名为 logs 的文件夹的文件夹同步 使困惑 这是一个图表 C mydir sync this folder someotherfiles txt anotherDir into this
  • c, obj c 没有标签或标识符的枚举

    我正在学习 cocos2d iPhone 上目标 C 的 open gl 包装器 现在玩精灵在一个示例中发现了这一点 enum easySprite 0x0000000a mediumSprite 0x0000000b hardSprite
  • 如何确定 akka 中生成的 actor 数量?

    我最近开始研究 Akka 2 0 框架 并且能够运行一些代码 生成执行简单 Oracle 数据库调用 执行简单计算等的 Actor 但是在生产中什么也没有 我想知道的是 是否有一般的经验法则或最佳实践来确定为某些类型的任务生成多少个参与者
  • 无法在同一页面设置PHP cookie

    我在同一页面上设置 cookie 时遇到问题 我在我的网站上使用了 cookie 它工作正常 我倾向于将 php 设置为单独的文件 现在 我在同一页面上设置 cookie 但它似乎不起作用 expire time 5 setcookie r
  • 如何使用 JSP 页面中的参数运行 java 类?

    我之前编写了一个从 bash 文件执行的 java 类 现在我需要使用 Javascript HTML 按钮允许它从 JSP 页面执行 我想知道如何做到这一点 首先 我的课程是这样的 public class Sync public sta
  • WCF .svc 文件在 IIS7.5 .NET 4.0 中用作纯文本 - 不在默认网站下

    最终更新 事实证明 由于 DotNetNuke 模块的压缩问题 这是一个转移注意力的问题 我必须添加到 PageBlaster DNN 模块 所以这不再是问题 我正在将 WCF svc 文件部署到我的实时网站 http www pokerd
  • 无法打开输入文件:localhost:8080

    在 Windows 上 要从命令提示符运行 PHP Web 服务器 我键入 php s localhost 80800 t public 我收到此错误 无法打开输入文件 localhost 8080 And yet cmd php test
  • 在 SQL 中使用累积需求时在聚合级别上优化表概览

    我试图找到最好的方法来获得累积显示的总体概述的概述 即通过扣除不满足每个步骤中的累积要求的观察结果 这是表脚本和示例数据 CREATE TABLE Table A id INTEGER NOT NULL PRIMARY KEY totalA
  • Spark 中的迭代缓存与检查点

    我有一个在 Spark 上运行的迭代应用程序 我将其简化为以下代码 var anRDD org apache spark rdd RDD Int sc parallelize 0 to 1000 var c Long Int MaxValu
  • 在 Python App Engine API 中写入和读取 blobstore 文件以存储时间戳

    我正在使用 Google App Engine 的 python API 我想做的是从服务器加载文件列表 如果它已经过去了超过一个时间间隔 例如 1 小时 为此 我尝试将执行的最后一个操作小时存储到文件中 并在下次读取它以了解与下一个请求的
  • 自定义字体和 XML 布局 (Android)

    我正在尝试在 Android 中使用 XML 文件定义 GUI 布局 据我所知 没有办法指定您的小部件应该在 XML 文件中使用自定义字体 例如您放置在 asset font 中的字体 并且您只能使用系统安装的字体 我知道 在 Java 代
  • ggplot2 中的并排水平图例

    我想让我的 ggplot 图例并排出现在图下方 变量名称位于符号上方 就像它们在this https kohske wordpress com 2010 12 25 various position adjustments of legen
  • Html 锚文本格式

    这可能是一个基本问题 但我使用的是 HTML 锚点 锚点的文本作为多行段落 我有 br 锚文本部分中当前无法识别的标签 所有文本在输出中都在一行中 锚标签代码如下 li a href title View all Printed Docum
  • 为什么 arr 和 &arr 相同?

    我已经编程c c 很多年了 但是今天的偶然发现让我有些好奇 为什么下面的代码中两个输出产生相同的结果 arr当然是地址arr 0 即指向arr 0 我本来期望 arr是该指针的地址 但它具有相同的值arr int arr 3 cout lt
  • 如何使用 Visual Studio 命令行 + SCons 构建 Windows XP 应用程序?

    使用 Visual Studio 2015 IDE 构建 Windows XP 应用程序一点也不难 您只需要使用正确的平台工具集 v120 xp 或 v140 xp 并确保在目标计算机上安装正确的可再发行 Visual Studio 运行时
  • 绘制可调整大小(不相交)的多边形

    我到处寻找但找不到答案 我 需要通过鼠标交互绘制可调整大小的多边形 但我 不希望出现不规则 重叠或相交的多边形 结尾 这是绘制可调整大小的多边形的简单示例http www wolfpil de polygon html http www w
  • Pom.xml项目构建错误

    我已经在 Eclipse 中导入了 Maven 项目 但在 pom xml 中出现以下错误 项目构建错误 dependencyManagement dependency dependency systemPath 为 jdk tools j
  • 如何在uWSGI中配置允许的GET参数字符数?

    我正在使用 nginx uWSGI 运行 Django 刚刚从本地开发转移到临时服务器后 我发现我们发出的特定 GET 请求有一个很长的查询字符串 尝试调试 似乎 uWSGI 不接受这个基于长度的查询字符串 我可以传递短字符串并且它可以工作
  • 为什么 $1 在 hashref 赋值中指向与多个正则表达式匹配的相同值?

    对于没有故事的问题 请跳到行后 我正在把一串由一些字母和数字组成的字符串 这两种情况都可能出现 分成散列引用中的两个字段 仅当该字段存在时它们才应该出现 该字符串可能如下所示 D d 例如ZR17 R15 19 22 我不想简单地将其放入这