2
好的,所以我正在尝试制作自己的标记语言[对于一个班级,我知道这很愚蠢],并且在运行时遇到了很多麻烦。 只要我添加导致调用arraySplitter函数的文本,它似乎就卡住了(只是暂停,我假设会陷入循环中)。如果您愿意,我可以提供信息和输出。这似乎是一个简单的错误,因为我对Perl很新颖。Perl - > HTML选择解析器
#JokeCode -> HTML
use strict;
use warnings;
use Getopt::Std;
my %opts=();
theFunctionThatActuallyParsesTheNonsense($opts{i});
my $questionCounter;
my $tempVar;
my @arrayForSplit;
my @goodArray;
my $curLine;
sub theFunctionThatActuallyParsesTheNonsense
{
my $outputF = $_[0];
$questionCounter= 0;
while (<LINES>)
{
$curLine= $_;
if($curLine =~ m/&&url/)
{
@arrayForSplit = split(/ /,$_);
$curLine =~ s/$arrayForSplit[1]//;
$curLine =~ s/$arrayForSplit[2]//;
$curLine =~ s/&&url/<a href="$arrayForSplit[1]">$arrayForSplit[2]/;
$curLine =~ s/url&&/<\/a>/;
print @arrayForSplit;
}
$curLine =~ s/\&\&b /<b>/;
$curLine =~ s/ b\&\&/<\/b>/;
$curLine =~ s/&&i /<i>/;
$curLine =~ s/ i&&/<\/i>/;
$curLine =~ s/&&u /<u>/;
$curLine =~ s/ u&&/<\/u>/;
$curLine =~ s/&&tt/<tt>/;
$curLine =~ s/tt&&/<\/tt>/;
$curLine =~ s/&&grn/<span style="color:#00ff00">/;
$curLine =~ s/grn&&/<\/span>/;
$curLine =~ s/&&red/<span style="color:#ff0000">/;
$curLine =~ s/red&&/<\/span>/;
$curLine =~ s/&&blu/<span style="color:#0000ff">/;
$curLine =~ s/blu&&/<\/span>/;
$curLine =~ s/&&ex/<pre class="code">/;
$curLine =~ s/ex&&/<\/pre>/;
if($curLine =~ m/&&tf/)
{
$curLine =~ s/&&tf/<form><br><input type="text" name="$questionCounter"><\/form>/;
$curLine =~ s/tf&&//;
$questionCounter++;
}
print "even here?";
if($curLine =~ m/&&mc/)
{
print "How bout now?";
@goodArray = arraySplitter($curLine);
foreach (@goodArray)
{
$curLine =~ s/&&mc/<input type="radio" name="$questionCounter" value="$_"> $_ <br>/;
}
$curLine =~ s/&&mc/<br>/;
$curLine =~ s/mc&&/<input type="radio" name="questionCounter" style="display: none;"\/>/;
$questionCounter++;
}
print OUT $curLine;
print OUT "\n";
}
sub arraySplitter
{
print "Are you still there?";
my @retArray;
my $arrayPlace = 0;
my @mcArray = split(/ /,$_[0]);
print @mcArray;
if(scalar(@mcArray)-1 < 1)
{
print "The size of the array is 0";
exit 1;
}
while ($arrayPlace < scalar(@mcArray)-1)
{
$retArray[$arrayPlace] = $mcArray[$arrayPlace];
}
print @retArray;
return @retArray;
}
}
虽然知道[你不应该用正则表达式解析HTML/XML](http://stackoverflow.com/a/1732454/459233),Tom Christiansen在他的回复中实现了一个解析器:[哦,是的,你可以使用正则表达式来解析HTML!](http://stackoverflow.com/a/4234491/459233)我建议你使用一些解析器,如[XML :: LibXML](http://search.cpan.org/~shlomif/XML-LibXML-2.0010/LibXML.pod),[XML :: Simple](http://search.cpan.org/~grantm/XML-Simple-2.20/lib/XML/Simple.pm)或甚至[ Marpa :: HTML](http://search.cpan.org/~jkegl/Marpa-HTML-0.112000/lib/Marpa/HTML/Doc/HTML.pod)如果你没有严格的要求reg –
@TudorConstantin谢谢为了回应!我对Perl这个美丽的世界很陌生,并且睁大眼睛,r che che,,相信所有事情都可以通过Perl的美妙功能解析(HAHAHA)。认真。我一直在使用Java,直到我找到一份真正的工作。用java来做这些事情就像用叉子吃汤一样。 –