如何在 Perl 中使用变量作为正则表达式修饰符?

2023-11-20

我正在编写一个抽象函数,它将询问用户一个给定的问题并根据给定的正则表达式验证答案。重复该问题,直到答案与验证正则表达式匹配。

但是,我还希望客户端能够指定答案是否必须区分大小写。

所以像这样:

sub ask {
    my ($prompt, $validationRe, $caseSensitive) = @_;
    my $modifier = ($caseSensitive) ? "" : "i";
    my $ans;
    my $isValid;

    do {
        print $prompt;
        $ans = <>;
        chomp($ans);

        # What I want to do that doesn't work:
        # $isValid = $ans =~ /$validationRe/$modifier;

        # What I have to do:
        $isValid = ($caseSensitive) ?
            ($ans =~ /$validationRe/) :
            ($ans =~ /$validationRe/i);

    } while (!$isValid);

    return $ans;
}

结果:有没有办法动态指定正则表达式的修饰符?


结果:有没有办法动态指定正则表达式的修饰符?

From perldoc perlre:

“(?adlupimsx-imsx)” “(?^alupimsx)” 要打开的一个或多个嵌入式模式匹配修饰符(或 对于模式的其余部分,如果前面有“-”,则关闭,或者 封闭模式组的其余部分(如果有)。

这对于动态模式特别有用,例如那些读取的 从配置文件中获取,从参数中获取,或在中指定 某处的一张桌子。考虑一些模式想要成为的情况 区分大小写,有些不区分大小写:不区分大小写的只需要 在模式的前面包含“(?i)”。

这给了你一些类似的东西

$isValid = $ans =~ m/(?$modifier)$validationRe/;

以这种方式接受用户输入时,请务必采取适当的安全预防措施。

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

如何在 Perl 中使用变量作为正则表达式修饰符? 的相关文章

  • SQL Server 列名区分大小写

    我使用的数据库具有 French CI AS 排序规则 CI 应该代表不区分大小写 但无论如何都是区分大小写的 我试图理解为什么 我断言这一点的原因是 使用 GIVEN 案例设置进行批量插入失败 但使用另一个 Given 案例设置则成功 例
  • 根据插入顺序迭代哈希?

    不想对条目进行排序 使用它也不会保留顺序 foreach my val keys hash 默认情况下 Perl 5 中的哈希值是无序的 您可以使用tie http perldoc perl org functions tie html a
  • 将字符串限制为逗号后 2 个数字且仅限 1 个逗号

    我有下面的脚本 只允许输入文本上的数字和逗号 function validate evt var theEvent evt window event var key theEvent keyCode theEvent which key S
  • 使用通配符分割字符串

    我有一个变量字符串 其中包含我需要的值和拆分器 问题是 字符串的长度是可变的 分割器的类型也是可变的 它们通过 XML 文件到达 字符串将如下所示 1 20 51 2 name jpg 但也可以是 1 20 51 name jpg 坚实的因
  • 将 HTML 转换为 Excel 的最佳方法是什么

    我有一个 HTML 页面 其中包含 Flash 图表 FusionCharts 和 HTML 表格 我需要将这整个事情转换成Excel HTML 表格应显示在 Excel 工作表的单元格中 Flash 图表可以显示为图像 我们可以使用任何开
  • 正则表达式:如何匹配所有大于 954 的数字?

    I tried 0 9 d d 4 但它没有给出正确的结果 I 不会使用正则表达式因为你会陷入丑陋的模式链中 但是 如果仍然必须或想要使用它 您可以使用如下正则表达式 1 9 d 3 9 6 9 d 9 5 9 2 工作演示 https r
  • Perl 的 caller() 函数返回错误的行号

    我在 Perl 5 10 1 上运行了以下脚本 usr bin perl use strict use warnings foreach my x 0 x lt 1 x Line 5 print line Line 6 sub print
  • Java 正则表达式中 \w 和 \b 的 Unicode 等效项?

    许多现代正则表达式实现解释 w字符类简写为 任何字母 数字或连接标点符号 通常 下划线 这样 正则表达式就像 w 匹配像这样的词hello l ve GO 432 or gefr ig 不幸的是 Java 没有 在爪哇 w仅限于 A Za
  • 如何在 iPhone 应用程序中使用正则表达式以 , (逗号)分隔字符串

    我必须读取包含三列的 csv 文件 在解析 csv 文件时 我得到了这种格式的字符串克里斯托弗 巴斯 为心爱的国家哭泣 期末论文 电子邮件受保护 cdn cgi l email protection 我想将三列的值存储在一个数组中 所以我使
  • 正则表达式(第一个字符匹配 a-z)

    我有这个正则表达式 a zA Z0 9 上面我想补充的是 第一个字符只能是a zA Z 我怎样才能制作这个正则表达式 尝试这样的事情 a zA Z a zA Z0 9 解释 Start of line string a zA Z Chara
  • 请解释*贪婪量词的工作原理

    Pattern ptn Pattern compile a Matcher mtch ptn matcher bbaac if mtch find System out println mtch group 输出 不打印任何内容 Patte
  • C++ 正则表达式,未知转义序列 '\.'警告

    我第一次尝试在 C 中使用正则表达式 我对转义序列有点困惑 我只是想匹配字符串开头的点 为此 我使用表达式 它有效 但我的编译器 g 生成警告 warning unknown escape sequence regex self regex
  • 用于验证 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 现在
  • 当页面上已有tinymce实例时,动态添加tinymce编辑器

    这是我已经问过的这个问题的后续 动态添加tinymce编辑器 https stackoverflow com questions 19157574 add a tinymce editor dynamically 我有一个包含编辑器的页面
  • 在 Google 表格应用程序中进行身份验证

    我有一个类似批处理的应用程序 由调度程序定期调用 无需人类用户参与 它使用 PerlNet Google 电子表格 http metacpan org pod Net Google Spreadsheets包通过从数据库获取的数据来更新 G
  • Perl 三元条件运算符

    我正在尝试在脚本中编写更高效的代码 并且有时会实现三元条件运算符 我不明白为什么在循环中使用三元条件运算符时会得到额外的结果 usr bin perl use strict use warnings my array Serial 123
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • 与有效正则表达式匹配的正则表达式

    是否存在与有效正则表达式匹配的正则表达式 我知道正则表达式有多种风格 其中一种就可以了 是否存在与有效正则表达式匹配的正则表达式 根据定义 它非常简单 No 所有正则表达式的语言是no regular语言 只需查看嵌套括号 因此不可能有re

随机推荐

  • 坐标压缩

    问题 您有一个 N x N 网格 1 我尝试用 BFS 解决这个问题 但是对于非常大尺寸的网格来说它太慢了 然后我听说了坐标压缩 有人可以解释什么是坐标压缩 它是如何实现的 我在哪里可以了解更多信息 在广阔的场地上几乎没有什么障碍 如果将字
  • 安装后执行Android代码[重复]

    这个问题在这里已经有答案了 可能的重复 android 中有安装事件吗 我只想在 Android 应用程序安装完成后执行一段代码 此后的代码不应在应用程序中执行 谁能告诉我该怎么做 Reagrds Shankar 我尝试了下面的代码来使这项
  • 转换在编译器/机器级别有什么作用?

    我经常想知道转换在编译器或机器级别到底做了什么 它对内存中的0和1有什么作用 谁能指点我一些好的文献 在引用类型之间进行转换时 转换不会修改各个位 它只是指示编译器 运行时在可能的情况下以特定方式解释这些位 如果由于类型不兼容而无法在编译时
  • 您的 Mac 运行的 OS X 版本低于项目的最低部署目标

    我创建了一个可可框架和测试应用程序来检查框架功能 我使用了 10 9 2 osx 版本 它在 10 9 2 上运行良好 当我在 osx 版本 10 8 5 上运行此程序时 出现以下错误 您的 Mac 运行的 OS X 版本低于项目的最低部署
  • 参考类的并行计算

    我有一个相当大的对象列表 我想并行应用一个复杂的函数 但我当前的方法使用了太多内存 我认为参考类可能会有所帮助 但是使用mcapply修改它们似乎不起作用 该函数修改对象本身 因此我用新对象覆盖原始对象 由于该对象是一个列表 而我只修改了其
  • 如何在 SQL Server 2012 中使用 CROSS APPLY 取消透视列

    我想使用 CROSS APPLY 来 UNPIVOT 多个列 列CGL CPL EO应成为覆盖类型 其值CGL CPL EO应该进入列Premium 以及值CGLTria CPLTria EOTria应该进入列Tria Premium de
  • EntityFramework 6 RC1 包含多对多属性失败

    我在代理和代理组之间有多对多关系 伪代码 缩写 public class Agent public virtual List
  • 在 android studio 中不显示 styles.xml

    我在 Windows 中的 Android Studio 中创建了一个应用程序 现在我的资源文件有问题 style xml 它不显示 不存在 检查附图 XML 文件的图像我怎样才能显示它 Thanks android studio 提供的新
  • 如何为 PHP 生成的图像设置默认的“图像另存为”名称?

    我的网站中有一个页面 显示我的 PHP 生成的一些图像 当我右键单击图像并单击 将图像另存为 时 我得到用于生成图像的 php 文件的名称作为默认名称 例如 这是图像的 html img src picture generator php
  • 箭头和 Tab 键在 sbt 1.0.3 控制台中不起作用

    跑步时sbt控制台在 Scala 2 12 4 sbt 1 0 3 MacOS 10 13 1 中 箭头键输出类似 A 的代码 而不是检索最后一个命令 制表符输出制表符而不是自动竞争 如果我直接运行 Scala REPL 或运行sbt然后从
  • 如何在 Shiny 中显示没有工具栏的绘图?

    这个问题是一个延伸this问题 我正在 Shiny 中绘制一个相当大的 ggplot Using renderPlot width 1500 height 1000 我能够展示整个情节 但是 我现在右侧有一个滚动条 我想扩展 FluidRo
  • 在 Python 3 中打印不带 b' 前缀的字节

    我如何打印bytes字符串不带b Python 3 中的前缀 gt gt gt print b hello b hello Use decode gt gt gt print b hello decode hello
  • 如何在同一手机上打开 WhatsApp Business 应用程序中的 wa.me 链接而不是个人 WhatsApp?

    我们在 Angular 8 中有一个 Web 应用程序 我们有以下代码来显示一个按钮 用户可以单击该按钮通过 WhatsApp 向联系人发送预定义的消息 a target blank href https wa me internation
  • 在 CakePHP 3 中加载来自供应商的 javascript 文件

    我的问题是如何从 CakePHP 3 0 中的供应商文件夹加载 js 文件 我已经通过 Composer 包含了 twitter bootstrap js 文件位于 vendor twbs bootstrap sass assets jav
  • 无法写入二进制文件

    我有以下 C 代码 int arr 1 2 3 4 5 6 7 8 9 10 ofstream output Sample txt ios out ios binary for int i 0 i lt 10 i output lt
  • 找不到强大的模块 - Node.js

    我开始使用 node j 进行开发 我遇到了有关使用 formidable 模块的问题 我有这个错误 错误 找不到模块 强大 以下是使用 npm lsinstalled 安装的模块列表 email protected email prote
  • 从命令行进行 MySQL 备份和恢复

    我正在使用命令行来备份和恢复 MYSQL 数据库 让我们使用我有一个数据库 Data1 其中包含视图和过程 当在Cmd line I use mysqldump i e gt bin gt mysqldump u root proot Da
  • CSS“content”属性中的 HTML 特殊字符

    我正在尝试使用 CSS before content 字段在项目之前添加内容 我想插入一个复选标记 但如果我在内容选项中使用它 它会打印为文字 我如何告诉 CSS 使其成为复选标记 而不是文字字符串 尝试这个 target before c
  • 如果用户 = 系统,.NET 用户设置存储在哪里?

    我一直在使用更新来更新我的一个应用程序并使用Properties Settings Default Upgrade 并发现我的更新程序重新启动我的应用程序后 它在系统用户而不是默认 登录用户下运行 这让我想知道 SYSTEM 的 user
  • 如何在 Perl 中使用变量作为正则表达式修饰符?

    我正在编写一个抽象函数 它将询问用户一个给定的问题并根据给定的正则表达式验证答案 重复该问题 直到答案与验证正则表达式匹配 但是 我还希望客户端能够指定答案是否必须区分大小写 所以像这样 sub ask my prompt validati