如何在 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 中使用变量作为正则表达式修饰符? 的相关文章

随机推荐

  • 坐标压缩

    问题 您有一个 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