如何将字符串转换为在Perl中与自身匹配的正则表达式?

Ano*_*don 4 regex perl

如何将字符串转换为在Perl中与自身匹配的正则表达式?

我有一组像这样的字符串:

Enter your selection:
Enter Code (Navigate, Abandon, Copy, Exit, ?):
Run Code Online (Sandbox Code Playgroud)

我想将它们转换为正则表达式,我可以匹配其他东西.在大多数情况下,字符串与正则表达式相同,但在上面的第二个示例中没有,因为(和?在正则表达式中有意义.因此第二个字符串需要变成如下表达式:

Enter Code \(Navigate, Abandon, Copy, Exit, \?\):
Run Code Online (Sandbox Code Playgroud)

我不需要匹配太严格,所以像这样的东西会很好:

Enter Code .Navigate, Abandon, Copy, Exit, ..:
Run Code Online (Sandbox Code Playgroud)

我目前的想法是,我可以使用类似的东西:

s/[\?\(\)]/./g;
Run Code Online (Sandbox Code Playgroud)

但我真的不知道字符串列表中会有哪些字符,如果我错过了一个特殊字符,那么我可能永远不会注意到程序没有按预期运行.我觉得应该有一个普遍的解决方案.

谢谢.

dao*_*oad 18

正如Brad Gilbert评论使用quotemeta:

my $regex = qr/^\Q$string\E$/;
Run Code Online (Sandbox Code Playgroud)

要么

my $quoted = quotemeta $string;
my $regex2 = qr/^$quoted$/;
Run Code Online (Sandbox Code Playgroud)


Bra*_*ert 7

有一个功能quotemeta.

quotemeta EXPR
返回EXPR 所有非"单词"字符反斜杠的值.(也就是说,所有不匹配的字符/[A-Za-z_0-9]/都将在返回的字符串中以反斜杠开头,而不管任何语言环境设置.)这是\Q在双引号字符串中实现转义的内部函数.

如果EXPR省略,则使用$_.