为什么要应用perl代码
undef $/; # read in entire file or STDIN
$_ = <>;
s|<head>.*<\head>|<head>...</head>|s;
应用于包含以下内容的文本文件
<head>[anything]</head>
生产
...
而不是
<head>...</head>
?
当替换REPLACE字段中的'<'字符被省略时,如
s|<head>.*</head>|head>.../head>|s;
替代产生
head>...end>
'<'字符会有所不同,但我找不到原因的解释。
如何在替换结果中产生'<'?
答案 0 :(得分:1)
第一个代码段不会产生您要求的输出。
$ perl -e'$_ = "<head>foo</head>"; s|<head>.*<\head>|<head>...</head>|s; CORE::say'
<head>foo</head>
之所以不执行替换,是因为\h
与水平空白字符匹配。
您可能打算使用</head>
而不是<\head>
。产生所需的输出。
$ perl -e'$_ = "<head>foo</head>"; s|<head>.*</head>|<head>...</head>|s; CORE::say'
<head>...</head>
正如您所声称的,没有什么比您的代码更能产生...
了。当然,如果您在HTML查看器中查看包含<head>...</head>
的文件,它将显示为...
。要生成呈现为<head>...</head>
的HTML,您需要执行一些转义。
$ perl -e'
use HTML::Escape qw( escape_html );
$_ = "<head>foo</head>";
s|<head>.*</head>|<head>...</head>|s;
CORE::say(escape_html($_));
'
<head>...</head>
答案 1 :(得分:0)
假设<\head>
是一个错误,您的代码将执行您期望的操作。无论您使用什么方法查看结果,都可能是缺少标签的原因。您在浏览器中查看输出吗?
当您删除开头的<
时,标签不再看起来像标签,而是显示它们而不是对其进行操作。