转义Perl字符串中的尖括号

时间:2015-04-13 03:39:04

标签: regex perl

似乎是一个非常简单的问题,但它让我疯狂。我发现的答案太复杂了。

我需要创建一个基本的降价脚本。我有一行文本文件:

# heading 1

我想从头开始删除“#”,所以我使用正则表达式s /

$i =~ s/^#\s//;

成功! $ i现在读取

heading 1

下一步是添加html标记以使其成为标题。我需要$ i:

<h1>heading 1</h1>

似乎很简单

$i = <h1>$i</h1>;

nope ... perl对使用&lt;&gt;感到疯狂。好的,所以用单引号逃脱它们。

$i = '<h1>'$i'</h1>';

仍然不高兴。而且我现在一直在改变事情和拖延几个小时的答案,以至于我比起初时更加困惑。有人可以解释一下,就像我5是如何让我成为我需要它的字符串。

由于

4 个答案:

答案 0 :(得分:2)

只需一次更换即可实现此目的。

my $string = "# heading 1";
$string =~ s/^#\s*(.*)/<h1>$1<\/h1>/;
print $string."\n";

答案 1 :(得分:0)

您需要在双引号字符串中替换:

$i = "<h1>$i</h1>";

或使用字符串连接:

$i = '<h1>' . $i . '</h1>';

答案 2 :(得分:0)

当然,您也可以使用领先的octothorpes数量自动推断出标题级别。

#!/usr/bin/env perl

use strict;
use warnings;

while (my $line = <DATA>) {
    next unless $line =~ /\A ([#]{1,6}) \s+ ([^\n]+) $/x;
    my $level = length $1;
    print "<h$level>$2</h$level>\n";
}


__DATA__

# heading 1
## heading 2
### heading 3
#### heading 4
##### heading 5
###### heading 6

输出:

<h1>heading 1</h1>
<h2>heading 2</h2>
<h3>heading 3</h3>
<h4>heading 4</h4>
<h5>heading 5</h5>
<h6>heading 6</h6>

答案 3 :(得分:-1)

双引号工作正常,没有错误。 我尝试了以下示例

$i = "<h1>Here Comes The Header<\h1>";
print "$i";

output: 
<h1>Here Comes Header<h1>

我认为双引号

不会有任何问题