[英]'<' in Perl substitution REPLACE field
為什么要應用Perl代碼
undef $/; # read in entire file or STDIN
$_ = <>;
s|<head>.*<\head>|<head>...</head>|s;
應用於包含
<head>[anything]</head>
生產
...
並不是
<head>...</head>
?
當替換替換字段中的'<'字符被省略時,如
s|<head>.*</head>|head>.../head>|s;
替代產生
head>...end>
“ <”字符有所不同,但我找不到原因的解釋。
如何在替換結果中產生“ <”?
第一個代碼段不會產生您要求的輸出。
$ 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>
假設<\\head>
是一個錯誤,您的代碼將執行您期望的操作。 無論您使用什么方法查看結果,都可能是缺少標簽的原因。 您是否正在瀏覽器中查看輸出?
當您刪除開頭<
,標記不再看起來像標記,而是顯示它們而不是對其進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.