簡體   English   中英

Perl替代REPLACE字段中的“ <”

[英]'<' 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($_));
'
&lt;head&gt;...&lt;/head&gt;

假設<\\head>是一個錯誤,您的代碼將執行您期望的操作。 無論您使用什么方法查看結果,都可能是缺少標簽的原因。 您是否正在瀏覽器中查看輸出?

當您刪除開頭< ,標記不再看起來像標記,而是顯示它們而不是對其進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM