繁体   English   中英

Perl从文本文件解释正则表达式

[英]Perl interpret regex from text file

我是Perl的初学者,对正则表达式有疑问。 我正在工作的脚本的目的是在XML文件中用一个字符串替换另一个字符串。 这些字符串在一个文本文件中,如下所示:

mot-clé, mot clé
noeud, nœud
version (\d), version (\d)
Codename One, Codename One

脚本采用此文件的每一行并将其放入哈希表,然后用其值替换键:

# Open file text and recupration of the lines in a table @t
%hach = @t;
foreach my $k (keys(%hach)) {
   s/$k/$hach{$k}/sg;
}

替换是在XML文件上进行的。 例如,在运行脚本之前,它看起来像这样:

<title>Codename One</title>
<para>Le mot-clé de la version 3 .....</para>
<para> .... noeud .... </para>

在传递脚本后,我希望它看起来像这样:

<title>Codename&#8201;One</title>
<para> Le mot clé de la version&#8201;3 .....</para>
<para> .... nœud .... </para>

目前,已完成对“普通”字符串的替换,但不对包含正则表达式的字符串进行替换。 对于这些字符串,我也希望perl能够解释与正则表达式相关的字符。 然后,脚本将能够进行所有替换。 这是我的问题:Perl是否有可能将这些字符串解释为regex? 如果可能的话,怎么办?

提前致谢!

您需要在代码中区分文本键和正则表达式键。 对于正则表达式键,如果有捕获组,请在相应的值中使用双评估替换和反向引用

use 5.026;
use Tie::RefHash;
use strictures;

my %subst;
tie %subst, 'Tie::RefHash';
%subst = (
    'mot-clé' => 'mot clé',
    noeud => 'nœud',
    qr'version (\d)' => 'version&#8201;$1',
    'Codename One' => 'Codename&#8201;One',
);

my $text = <<'';
<title>Codename One</title>
<para>Le mot-clé de la version 3 .....</para>
<para> .... noeud .... </para>

foreach my $k (keys %subst) {
    if (ref $k eq ref qr'') {
        $text =~ s/$k/qq("$subst{$k}")/eegms;
    } else {
        $text =~ s/$k/$subst{$k}/gms;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM