Regex Perl字符串中的转义尖括号

Regex Perl字符串中的转义尖括号,regex,perl,Regex,Perl,这似乎是一个非常简单的问题,但它让我疯狂。我找到的答案太复杂了 我需要创建一个基本的降价脚本。我有一个包含以下行的文本文件: # heading 1 我想从开头删除“#”,所以我使用正则表达式s/ $i =~ s/^#\s//; 成功$我现在读 heading 1 下一步是添加html标记,使其成为标题。我需要$I成为: <h1>heading 1</h1> 标题1 看起来很简单 $i = <h1>$i</h1>; $i=$i; 不…

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

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

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

$i =~ s/^#\s//;
成功$我现在读

heading 1
下一步是添加html标记,使其成为标题。我需要$I成为:

<h1>heading 1</h1>
标题1
看起来很简单

$i = <h1>$i</h1>;
$i=$i;
不…perl对使用。好的,用单引号将它们转义

$i = '<h1>'$i'</h1>';
$i=''$i'';
还是没有。几个小时以来,我一直在改变事情,反复寻找答案,以至于我比刚开始时更加困惑。有人能解释一下吗,就像我5岁了,我该怎么做才能得到我需要的那根绳子


谢谢

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

$i = "<h1>$i</h1>";
$i=“$i”;
或使用字符串连接:

$i = '<h1>' . $i . '</h1>';
$i=''$我",;

只需一次更换即可实现这一点

my $string = "# heading 1";
$string =~ s/^#\s*(.*)/<h1>$1<\/h1>/;
print $string."\n";
my$string=“#标题1”;
$string=~s/^#\s*(.*)/$1/;
打印$string。“\n”;

双引号工作正常,没有错误。 我用下面的例子尝试了这个

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

output: 
<h1>Here Comes Header<h1>
$i=“头来了”;
打印“$i”;
输出:
头球来了

我认为双引号不会有任何问题。当然,您也可以使用前导八位数字自动推断标题级别

#!/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
#/usr/bin/env perl
严格使用;
使用警告;
while(我的$line=){
下一步除非$line=~/\A([#]{1,6})\s+([^\n]+)$/x;
我的$level=长度$1;
打印“$2\n”;
}
__资料__
#标题1
##标题2
###标题3
####标题4
#####标题5
######标题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>
标题1
标题2
标题3
标题4
标题5
标题6

谢谢。我肯定我试过双引号,但当时肯定还有其他错误。我喜欢兜圈子。我会避免做
s???
,因为
m???
有特殊的意义,人们可能会来做这件事