我在玩弄Perl並試圖更好地理解其子字符串/正則表達式功能。使用Perl返回子字符串正則表達式
說我有一個字符串,如
[48:31.8]發送:> 33 * 1311875297587 * EVAL * 0 *幀[0] * 「A」 <
和要返回1311875297587。它將始終以這種格式。我將如何使用Perl來做到這一點?
感謝
我在玩弄Perl並試圖更好地理解其子字符串/正則表達式功能。使用Perl返回子字符串正則表達式
說我有一個字符串,如
[48:31.8]發送:> 33 * 1311875297587 * EVAL * 0 *幀[0] * 「A」 <
和要返回1311875297587。它將始終以這種格式。我將如何使用Perl來做到這一點?
感謝
假設 「[48:31.8] ......」 在$字符串,則:如果字符串不匹配
my ($number) = $string =~ /\*(\d+)\*eval\*/;
$number
將是不確定的,否則會包含"*"
和"*eval*"
之間的數字。
完美,謝謝! – Roger
我會在'*'上分割'輸入,並根據子串號解析它。少一點黑客,更強大。 – kevlar1818
if ($str =~ /\*(\d+)\*/) {
print $1;
}
對於它的價值,我覺得這是一個更強大的答案:
while(<STDIN>)
{
@fields = split(/\*/,$1) if(/(?<=>)([^<>])+(?><)/);
print "$fields[1]\n";
}
這允許訪問所有的字段,如果你需要它們,並且不依賴於固有爲了解析出一個特定的領域。
用你想要的任何逐行迭代代替while
循環。對於測試,請將其作爲Perl腳本運行,然後粘貼[48:31.8] Sent: >33*1311875297587*eval*0*frame[0]*"A"<
或其他任何內容。
my ($num) = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(\d{3,})/;
print $num;
描述如何識別感興趣的部分。長度至少爲3位數字的字符串?從「>」後面的第四個字符開始? 「* eval」之前的數字? etc ... – tadmc