使用 Perl 正则表达式返回子字符串

发布于 2024-11-27 15:32:49 字数 199 浏览 1 评论 0原文

我正在使用 Perl 并试图更好地理解它的子字符串/正则表达式功能。

假设我有一个字符串,例如

[48:31.8] Sent: >33*1311875297587*eval*0*frame[0]*"A"<

并想返回 1311875297587。它将始终采用该格式。我该如何使用 Perl 来做到这一点?

谢谢

I'm playing around with Perl and trying to get a better understanding of its substring/regex functionality.

Say I have a string such as

[48:31.8] Sent: >33*1311875297587*eval*0*frame[0]*"A"<

and want to return 1311875297587. It will always be in that format. How would I do this using Perl?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

青衫负雪 2024-12-04 15:32:49

假设“[48:31.8]...”在$string中,那么:

my ($number) = $string =~ /\*(\d+)\*eval\*/;

如果字符串不匹配,$number将是未定义的,否则它将包含”之间的数字*”“*eval*”

Assuming that "[48:31.8]..." is in $string, then:

my ($number) = $string =~ /\*(\d+)\*eval\*/;

$number will be undefined if the string doesn't match, otherwise it will contain the digits between "*" and "*eval*".

多情癖 2024-12-04 15:32:49
if ($str =~ /\*(\d+)\*/ ) {
    print $1;
}
if ($str =~ /\*(\d+)\*/ ) {
    print $1;
}
来日方长 2024-12-04 15:32:49
my ($num) = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(\d{3,})/;
print $num;
my ($num) = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(\d{3,})/;
print $num;
佞臣 2024-12-04 15:32:49

就其价值而言,我认为这是一个更可靠的答案:

while(<STDIN>)
{
    @fields = split(/\*/,$1) if(/(?<=>)([^<>])+(?><)/);
    print "$fields[1]\n";
}

如果您需要的话,这允许访问所有字段,并且不依赖于固有顺序来解析特定字段。

while 循环替换为您想要的任何逐行迭代。不过,为了进行测试,请将其作为 Perl 脚本运行,然后粘贴到您的行 [48:31.8] Sent: >33*1311875297587*eval*0*frame[0]*"A"<或其他什么。

For what it's worth, I think this is a more robust answer:

while(<STDIN>)
{
    @fields = split(/\*/,$1) if(/(?<=>)([^<>])+(?><)/);
    print "$fields[1]\n";
}

This allows access to all of your fields if you need them, and doesn't rely on inherent order to parse out a particular field.

Replace the while loop with whatever line-by-line iteration you want. For testing though, run this as a Perl script, then paste in your line [48:31.8] Sent: >33*1311875297587*eval*0*frame[0]*"A"< or whatever else.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文