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...
如果是这样,您需要一个比/./
更好的正则表达式解析器