如何将字符串转换为在 Perl 中匹配自身的正则表达式?
我有一组这样的字符串:
Enter your selection:
Enter Code (Navigate, Abandon, Copy, Exit, ?):
我想将它们转换为正则表达式所以我可以将其他东西与它们匹配。在大多数情况下,该字符串与正则表达式相同,但在上面的第二个示例中则不同,因为 ( 和 ? 在正则表达式中具有含义。因此第二个字符串需要成为如下表达式:
Enter Code \(Navigate, Abandon, Copy, Exit, \?\):
我不需要太严格的匹配,所以这样的事情就可以了:
Enter Code .Navigate, Abandon, Copy, Exit, ..:
我目前的想法是我可以使用类似的东西:
s/[\?\(\)]/./g;
但我真的不知道字符串列表中会有哪些字符,如果我错过了一个特殊字符,那么我可能永远不会注意到程序没有按预期运行。我觉得应该存在一个通用的解决方案。
谢谢。
最佳答案
正如布拉德吉尔伯特评论的那样使用 quotemeta :
my $regex = qr/^\Q$string\E$/;
或者
my $quoted = quotemeta $string;
my $regex2 = qr/^$quoted$/;
关于regex - 如何将字符串转换为在 Perl 中与其自身匹配的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1603054/