【问题标题】:Making Strings Safe for Regular Expressions in Perl在 Perl 中使字符串对正则表达式安全
【发布时间】:2010-09-03 01:33:12
【问题描述】:

我有一个字符串,我想在正则表达式中使用它,就像m/$mystring_03/ 但是$mystring 包含导致问题的+s 和斜杠。 Perl 中是否有一种简单的方法来修改$mystring 以确保正确转义所有正则表达式通配符或其他特殊字符? (就像所有的+ 变成了\+

【问题讨论】:

标签: regex perl


【解决方案1】:

是的,使用\Q and \E escapes

#!/usr/bin/perl

use strict;
use warnings;

my $text = "a+";

print
    $text =~ /^$text$/     ? "matched" : "didn't match", "\n",
    $text =~ /^\Q$text\E$/ ? "matched" : "didn't match", "\n";

【讨论】:

    【解决方案2】:

    quotemeta 函数可以满足您的要求。

    【讨论】:

    • quotemeta\Q\E 转义的函数接口。
    【解决方案3】:

    如果您要转义字符串中正则表达式的所有特殊字符,您也可以像使用 rindex 一样

    index($_, "$mystring_03")
    

    这将返回要测试的字符串中字符串的索引,如果没有找到匹配项,则返回 -1。

    【讨论】:

    • 整个正则表达式可能不在字符串中。
    • @Chas。 Owens 如果整个正则表达式(引用后)不在字符串中,它就不会匹配,是吗?我没有关注...完全引用的正则表达式何时会从子字符串检查中给出不同的结果?
    • 为什么只提rindex而不提index
    • @mobrule 没有理由,我编辑它是因为没有理由从头开始,尽管 AFAICS 在手头的问题中并不重要
    • 我在谈论这样的事情:/(?:full)?name: \Q$name\E/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多