所以我试图解析所有非html-tag匹配的网页。我正在使用RegExr,他们的一个样本模式完美地满足了我的需求。唯一的问题是我使用的是Perl 5并且它不断吐出这个错误:
Variable length lookbehind not implemented in regex m/((?<=^|>)[^><]+?(?=<|$))/ at POODLE_calc.pl line 36.
我在这里阅读了很多关于此错误的其他帖子,但仍然无法让它工作!我尝试过多次尝试重写模式,就像我在谷歌上想到的那样,或者在其中一个stackoverflow帖子中尝试了K,但仍然无效。
这是我在RegExr中试验的HTML页面的摘录(整页让它崩溃)
<TABLE border cellspacing="2">
<TR align="center">
<TD width="50"> no. </TD>
<TD width="50"> AA </TD>
<TD width="50"> ORD/DIS </TD>
<TD width="50"> Prob. </TD>
</TR>
<tr align="center">
<td> 1 </td>
<td> M </td>
<td> -1 </td>
<td> 0.1029 </td>
</tr>
如果你能帮我弄清楚一个模式会给我“没有.AO ORD / DIS Prob.1 M -1 0.1029”,Perl会接受我会非常感激!
谢谢,
霍比特
修改
我使用了ikegami建议的模式并且它停止了Perl错误,但它只返回“否”。和所有空格字符。 以下是进行解析的代码:
while (<FILE>){
$_ =~ /((?:^|(?<=>))[^><]+?(?=<|$))/g;
$proteinScores .= $1;
}
print $proteinScores."\n";
答案 0 :(得分:1)
(?<=^|>)
可以写成(?:(?<=^)|(?<=>))
,简化为(?:^|(?<=>))
答案 1 :(得分:1)
这可以有所帮助,假设没有文本跨越行和每行单个文本:
while (<DATA>){
$proteinScores .= $1 if />([^>]+)</;
}
这一行每行可以做多个文本:
while (<DATA>){
$proteinScores .= $1 while />([^>]+)</g;
}
这个可以处理跨越文本:
$text = join("", <DATA>);
$proteinScores .= $1 while $text =~ />([^<>]+)</g;