在替换正则表达式期间,是否有一种简单的方法可以使用Perl的重复运算符x
?
我试图在非常基本的HTML上快速进行单行操作而不使用模块。基本上,我希望根据HTML标记中的标题编号,将包含开放<h*>
和关闭</h*>
HTML标记的行转换为WIKI标记。所以......
___Original DATA___
<h1> This is a header one</h1>
<h2> This is a header two</h2>
<h3> This is a header three</h3>
___Wanted DATA___
= This is a header one =
== This is a header two ==
=== This is a header three ===
一切都适用于正则表达式本身,将原始标题标记所需的数字捕获到$1
变量中。在替换部分中,有没有办法可以使用该变量来创建所需数量的=
符号(例如"=" x $1
)?
perl -0777 -pe 's/<h(\d)>([^<]*)<\/h\d>/"="x$1 $2 "="x$1/gs'
,但命令的后半部分("="x$1 $2 "="x$1
)并没有给我想要的输出。
答案 0 :(得分:2)
运算符不以字符串形式进行插值。您需要/e
开关将替换解释为代码,而不仅仅是字符串:
s/<h(\d)>([^<]*)<\/h\d>/"=" x $1 . $2 . "=" x $1/ge
您还可以使用其他分隔符代替/
,以避免在</h
中反斜杠。
/s
,因为它会更改正则表达式中不会出现的.
行为。
答案 1 :(得分:1)
这就是s///e
regex modifier的用途:
s/<h(\d)>([^<]*)<\/h\d>/("=" x $1) .$2. ("=" x $1)/gse
答案 2 :(得分:0)
此版本使用{}分隔符来避免escape-itis,a / i和反向引用,例如
X = [(height);(width);(a1)];
无法匹配。
<h1>.....</h3>