Perl 新手。
我需要解析一个看起来像这样的报告:
2012-05-29@emaillocalpart@emaildomain@customerid@errormessage@messageid
我用了:
my @fields = split(/@/, $line, 6);
大多数情况下它工作正常,但有时错误消息将包含一个电子邮件地址和该电子邮件上 @ 符号之后的所有文本,直到字符串末尾将在我的消息 ID 上结束。
我考虑过检查@s 的数量并进行条件解析,但有更好的方法吗?
编辑:
所需的输出是一个字符串列表,错误消息包含其中的任何内容(包括偶尔的电子邮件地址)。
由于有其他应用程序使用相同的报告,我无法更改分隔符或转义输出。
报告上的示例行:
2012-05-29@joedoe@example.com@AB99-5@440 4.4.1 Some error occurred@XYZ35
2012-05-29@foobar@invalid.com@ZZ88-6@550 5.1.1 <foobar@invalid.com>... User Unknow@GGH93
2012-05-29@barfoo@invalid.com@YY88-0@550 5.1.1 barfoo@invalid.com no such user@GGH93
解析第 1 行后 @fields 的预期内容:
2012-05-29
joedoe
example.com
AB99-5
440 4.4.1 Some error occurred
XYZ35
在解析第 2 行之后:
2012-05-29
foobar
invalid.com
ZZ88-6
550 5.1.1 <foobar@invalid.com>... User Unknow
GGH93