gpt4 book ai didi

regex - 使用安全#! $ 正则表达式中的变量?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:39 26 4
gpt4 key购买 nike

有人能告诉我,在@rx 中使用所有这些特殊字符是否安全?我关心的是 # !$

如果不安全,我如何确保正则表达式不会解释 @rx 中的元素?

#!/usr/bin/perl
use strict;
use warnings;

my $doc = do { local $/; <STDIN> };

my @rx = (
'mariadb:\n build: ',
'#!/bin/bash\n\n/usr/bin/mysqld_safe',
'FROM centos:7',
'#!/bin/sh\n# This is /usr/libexec/mariadb-',
'#!/bin/bash\nVOLUME_HOME="/var/lib/mysql"',
'#!/bin/bash\nMYSQL="/usr/bin/mysql -u$DB_ENV_DBUSER'
);

my @a = ();

foreach my $r (@rx) {
push @a, $doc =~ /($r.{3000})/sg;
}

my $n = int(rand(999999999999999));
for my $i (0 ..$#a) {
system("echo '$a[$i]' > ext$n$i");
}

最佳答案

您可以通过执行以下操作自动转义任何必要的字符:

push @a, $doc =~ /(\Q$r\E.{3000})/sg;

但是您的正则表达式可能无法正常工作;它只会在文件的第一部分找到您的字符串,如果它们扩展到最后 3000 个字符则不会。如果它们之间没有 3000 个其他字符,它也只会找到两次出现之一。这两个问题都可以通过以下方式解决:

push @a, $doc =~ /(?=(\Q$r\E.{0,3000}))/sg;

关于regex - 使用安全#! $ 正则表达式中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29222519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com