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

标签 regex perl

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

相关文章:

javascript - 在 javascript 中拆分 HTML 以存储在数据库中

perl - 如何以可移植的方式在 Perl 中获取当前用户?

python - Python 中正则表达式的数字问题

ruby - 在 Ruby 的变量中保存多个正则表达式缓冲区?

java - 我们应该如何验证正则表达式语法

正则表达式捕获特定单词之间的单词

sql-server - 尝试更改连接到 SQL Server 数据库的 perl 脚本中的连接主机名

Perl 散列的散列原理

perl - 为什么我的 Perl/Tk Scrolled 实际上没有滚动?

mysql - SQL RegEx 处理逗号分隔的 ID