我正在修改舊的郵件工具並添加MIME支持。我有很多工作,但我是一個perl虛擬和正則表達式的東西正在失去我。搜索子字符串並將該字符串的另一部分作爲變量存儲在perl中
我:
foreach (@{$body}) {
next if /^$/;
if (/NEMS/i) {
/.*?(\d{5,7}).*/;
$nems = $1;
next;
}
if ($delimit) {
next if (/$delimit/ && ! $tp);
last if (/$delimit/ && $tp);
$tp = 1, next if /text.plain/;
$tp = 0, next if /text.html/;
s/<[^>]*>//g;
$newbody .= $_ if $tp;
} else {
s/<[^>]*>//g;
$newbody .= $_ ;
}
} # End Foreach
現在我有$body_text
作爲純文本郵件正文感謝MIME::Parser。所以,現在我只需要這部分工作:
foreach (@{$body_text}) {
next if /^$/;
if (/NEMS/i) {
/.*?(\d{5,7}).*/;
$nems = $1;
next;
}
} # End Foreach
的實際挑戰是找到NEMS=12345
或NEMS=1234567
並設置$nems=12345
如果找到。我認爲我在測試中遇到了一個非常基本的語法問題,因爲我並沒有經常接觸perl。
一個同事建議:
foreach (split(/\n/,$body_text)){
next if /^$/;
if (/NEMS/i) {
/.*?(\d{5,7}).*/;
$nems = $1;
next;
}
}
這似乎是工作,但它可能不會是首選的方法是什麼?
編輯:
因此,這是一個基於位置的提示和測試的最新版本:
foreach (split(/\n/,$body_text)){
next if /^$/;
if (/NEMS/i) {
/^\s*NEMS\s*=\s*(\d+)/i;
$nems = $1;
next;
}
}
還能有另一個數字 - 可以有八位數嗎?或者可能嚴格遵循非數字? – zdim
至於「_A同事建議_」 - 如果'$ body_text'是一個普通的字符串,他們的建議是正確的,但如果它是對數組的引用(「_arrayref_」),則應該使用原始字符串。這些是非常不同的。 – zdim
使用舊的Mail perl模塊的「舊」代碼是一個數組。在新的MIME中,它不是一個數組。 - 謝謝 –