Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex perl中的Quotemeta?如何解决错误:“;正则表达式中的嵌套量词;标记为<;——“这里”;_Regex_Perl - Fatal编程技术网

Regex perl中的Quotemeta?如何解决错误:“;正则表达式中的嵌套量词;标记为<;——“这里”;

Regex perl中的Quotemeta?如何解决错误:“;正则表达式中的嵌套量词;标记为<;——“这里”;,regex,perl,Regex,Perl,代码如下: my $vowels = "[aiou~NFKPQRIJ]"; my @diactok; for $rx (@tokens) { $rx =~ s/.\K/$vowels?/g; if ($diac =~ /($rx)/) { push @diactok, $diac =~ /$rx/g; } } 从上一个问题: 除了这个错误(我确实“使用了诊断”)之外,一切正常: 正则表达式中的嵌套量词;用线标记: $rx =~ s/.\K/$vowels

代码如下:

my $vowels = "[aiou~NFKPQRIJ]";
my @diactok;
for $rx (@tokens) {
    $rx =~ s/.\K/$vowels?/g;
    if ($diac =~ /($rx)/) {
        push @diactok, $diac =~ /$rx/g;
    }
}
从上一个问题:

除了这个错误(我确实“使用了诊断”)之外,一切正常:

正则表达式中的嵌套量词;用线标记:

$rx =~ s/.\K/$vowels?/g;
如果您在
@tokens
中确实有元字符,则是罪魁祸首。试试这个:

$rx =~ s/(.)/ quotemeta($1) . "$vowels?" /eg;

请注意,您不能引用整个正则表达式,因为在
$元音中有需要的元字符。

该模式最初是

(Al*yn)
你把它改成

(A[aiou~NFKPQRIJ]?l[aiou~NFKPQRIJ]?*[aiou~NFKP...
正如nessage所说,
[aiou~NFKPQRIJ]?*
是错误的。你没有指定你想要什么,所以很难给你一个解决方案

也许你想要

(A(?:[aiou~NFKPQRIJ]?)l(?:[aiou~NFKPQRIJ]?)*(?:[aiou~NFKP...
(A(?:[aiou~NFKPQRIJ]?)(?:l[aiou~NFKPQRIJ]?)*(?:[aiou~NFKP...
如果是这样,就使用

$rx =~ s/.\K/(?:$vowels?)/g;
也许你想要

(A(?:[aiou~NFKPQRIJ]?)l(?:[aiou~NFKPQRIJ]?)*(?:[aiou~NFKP...
(A(?:[aiou~NFKPQRIJ]?)(?:l[aiou~NFKPQRIJ]?)*(?:[aiou~NFKP...
如果是这样,您需要一个比
/./
更好的正则表达式解析器