perl - regex - 获取字符串后的所有文本

时间:2015-05-13 13:17:41

标签: regex perl

使用Perl Regex如何从以下内容获取 base64 之后的 IWantThisText 文本块:

Content-Type: text/html; charset="KOI8-R"  
Content-Disposition: inline  
Content-Transfer-Encoding: base64  

IWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThisTex
tIWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThisTe
xtIWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThisT
extIWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThis
TextIWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThisTextIWantThi
sTextIWantThi

编辑:
到目前为止我所拥有的:

my ($textIWant) = $textblock =~ m/base64(.*?)/;

2 个答案:

答案 0 :(得分:2)

您想要MIME消息的正文。身体通过空白线与标题分开。所以,只需连续检查两个换行符。

my ($body) = $mime_message =~ /\n\r?\n(.*)/s;

它处理MIME使用的标准CRLF换行符,但它也只处理LF。

答案 1 :(得分:0)

如果您将整个文件放在变量$textblock中,则可以通过从{{1}中删除base64非贪婪修饰符,在第一次出现?后提取所有内容并将(.*?)修饰符添加到示例代码中。

区别在于/s通常匹配字符串末尾的换行符之外的任何内容,因此.将停在包含{{的行的末尾1}}。添加(.*)会将其更改为匹配任何字符

base64

会为您提供所需内容,但请注意,它包含/s之后的所有空格字符和换行符

作为替代方案,您可以在第一次出现my $text_i_want; $text_i_want = $1 if $textblock =~ /base64(.*)/s; 时将字符串拆分为两个,然后选择第二部分,就像这样

base64

给出相同的结果