regex - 加载 Regexp::Grammars 后使用 "normal"正则表达式

标签 regex perl parsing regexp-grammars

我正在尝试使用 Regexp::Grammars在应用程序中,但它破坏了许多其他正则表达式。例如下面的代码:

$hello = 'hello';
print 'hello 1' if $hello =~ /hello/; #prints "hello 1"
use Regexp::Grammars;
print 'hello 2' if $hello =~ /hello/; #prints nothing

说明了我的问题。我不知道如何处理这个问题,除了重复加载和卸载模块之外,我什至不确定在使用 no 显式卸载模块后是否可以使用扩展正则表达式>。如何允许正常的正则表达式,同时仍然获得 Regexp::Grammars 的强大功能?

最佳答案

您无法卸载模块。模块只是一个脚本。卸载模块就是取消执行它。

但是,该模块确实充当词汇编译指示,因此您可以轻松限制其效果范围。

my $grammar = do {
    use Regexp::Grammars;
    qr{
        ...
    }x;
    # Active here
};
# Not active here

在 Regexp::Grammars 处于事件状态时创建的语法可以在 Regexp::Grammars 未处于事件状态时使用,因此只需仅在定义了语法的情况下使 Regexp::Grammars 处于事件状态即可。 (这个模块的界面多么糟糕!)

如果您的代码组织不良,需要禁用 Regexp::Grammars 中范围,也可以使用

no Regexp::Grammars;

请注意,效果 no Regexp::Grammars; 也是词法范围的。

关于regex - 加载 Regexp::Grammars 后使用 "normal"正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557180/

相关文章:

perl - 如何在 Perl 脚本中导出 shell 变量?

java - 如何比较两个 Java 字符串,而不必担心 Parse 查询中任一字符串的大小写?

java - 只保留一个完整的 URL

python 正则表达式也查找带有换行符的值

java - 我们应该在 Java 中使用正则表达式吗?

perl - Perl不会进入错误部分

perl : split a string using a newline character

javascript - 使用javascript从gif获取帧数和帧间延迟

c++ - 使用 Boost Spirit 提取未分隔的字符串和整数

mysql - MySQL 中的多列正则表达式搜索