如何将字符串转换为在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)