我有一个包含setInterval()
Text.txt
我有\mathbf{\mathit{adad09}
\mathit{\mathit{aavB}
\mathul{\mathit{AZDs}
个文件包含(因为用户可以添加或减少替换)
test.ini
我的预期输出是
<repl>
\mathbf{\mathit{([A-z0-9]*)} \boldsymbol{\mathit{$1}
\mathit{\mathit{([A-z0-9]*)} \italicsymbol{\mathit{$1}
\mathul{\mathit{([A-z0-9]*)} \underlinesymbol{\mathit{$1}
</repl>
我的编码在这里
\boldsymbol{\mathit{adad09}
\italicsymbol{\mathit{aavB}
\underlinesymbol{\mathit{AZDs}
错误:
use strict;
use warnings;
use Cwd;
my $myinicnt = ""; my $file = "Test.txt"; my $str = "";
readFileinString($file, \$str); readFileinString("Test.ini", \$myinicnt);
my @replsEach = ();
if($myinicnt=~m/<repl>(.*?)<\/repl>/gs) { @replsEach = split /\n/, $1; }
foreach my $myvar( @replsEach )
{
my ($val1, $val2) = split /\t/, $myvar;
my $quval1 = quotemeta $val1;
#First Attempt
$str=~s{$val1}{$val2}gi;
#Second Attempt
$str=~s{$quval1}{$val2}gi;
}
print $str;
#---------------> File reading
sub readFileinString
#--------------->
{
my $File = shift;
my $string = shift;
open(FILE1, "<$File") or die "\nFailed Reading File: [$File]\n\tReason: $!";
read(FILE1, $$string, -s $File, 0);
close(FILE1);
}
#---------------> File Writing
sub writeFileinString
#--------------->
{
my $File = shift;
my $string = shift;
my @cDir = split(/\\/, $File);
my $tmp = "";
for(my $i = 0; $i < $#cDir; $i++)
{
$tmp = $tmp . "$cDir[$i]\\";
mkdir "$tmp";
}
if(-f $File){
unlink($File);
}
open(FILE, ">$File") or die "\n\nFailed File Open for Writing: [$File]\n\nReason: $!\n";
print FILE $$string;
close(FILE);
}
#------------------------- SUB END ------------------------->
请任何人都可以指导我获得解决方案。
答案 0 :(得分:2)
如果您打印$ quval1,您将看到问题所在:
\\mathbf\{\\mathit\{\(\[A\-z0\-9\]\*\)\}
~~~~ ~~ ~~ ~~~~~~
http://allenfang.github.io/react-bootstrap-table/index.html反斜杠,圆括号,方括号和星号,但你需要保持它们不被反击。
但是,您如何识别哪些字符是正则表达式的一部分,哪些是TeX标记的一部分?
将正则表达式存储在已引用的文件中。
但是,这并没有结束这个故事。$1
是替换未扩展,因为它不包含在替换字面上。您可以使用/e
开关来评估替换,但是您需要再次使用反斜杠反斜杠,事实上您需要使用双/ee
来正确评估代码,因此您需要包装引号中的字符串使其在语法上正确。
数据:
<repl>
\\mathbf\{\\mathit\{([a-zA-Z0-9]*)\} \\boldsymbol{\\mathit{$1}
\\mathit\{\\mathit\{([a-zA-Z0-9]*)\} \\italicsymbol{\\mathit{$1}
\\mathul\{\\mathit\{([a-zA-Z0-9]*)\} \\underlinesymbol{\\mathit{$1}
</repl>
代码:
$val2 = qq("$val2");
$str =~ s/$val1/$val2/geei;
我还必须修复文件名,因为Text
,Test
和test
是三个不同的字符串。