如何在perl正则表达式中匹配换行符\ n?

时间:2010-12-21 02:22:22

标签: regex perl

我想匹配这一行,

<center>'''<font color="blue"><font size="18.0pt">No Change Alarms Help &amp; Information</font></font>'''</center>

并将其替换为,

=<center>'''<font color="blue">No Change Alarms Help &amp; Information</font>'''</center>=

现在,如果标签总是字体颜色或中心,那将很简单,但它们绝对可以是任何东西,并且可以有多个。

我目前的代码是:

$html =~ s/<font size=".+">(.+)<\/font>/$1/g;

但这显然不会在每一端做=。

我想做的是:

$html =~ s/\n(.+)<font size=".+">(.+)<\/font>(.+)\n/=$1$2$3=/g;

然而,它无法匹配换行符,我无法弄清楚如何使它与它们匹配,任何线索?

(我正在将html转换为wiki标记,但转换器会填充字体大小,因此我手动将它们转换为wiki样式标题。)

3 个答案:

答案 0 :(得分:6)

我在查询结束时所需要的只是/gm,默认情况下它会忽略新行。

答案 1 :(得分:1)

$string_given =~ s/matching expression/sustitution/s;

我认为这将起作用,使用/ s修饰符,这通常意味着“将字符串视为单行”。这改变了“。”的行为。也可以匹配换行符。

为了将此注释的开头与结尾相匹配,我们添加/ s修饰符,如下所示:

$str =~ s/<!-- Start.*End of section -->//s;

没有/ s,根本不匹配。

答案 2 :(得分:0)

在某些情况下,由于perl如何“吸收”输入,它可能不起作用。传递-0777作为参数将使其考虑多行。 (将其与您的其他参数一起传递,例如perl -0777pi -e