如何使用 Perl 递归正则表达式

发布于 2024-12-13 04:21:03 字数 337 浏览 0 评论 0原文

我需要测试设备的输出,大多数响应是一行,但有时是两行。我用一个简单的正则表达式解析一两行来处理它

if ($prompt =~ /(\s.*?)\r\n(.*)/)
{
   Note('Multiline '.$string);
   TestPrompt($string, $1);
   TestPrompt($string, $2);
}
else
{
   TestPrompt($string, $prompt);
}

但是如果响应超过两行怎么办?该代码无法处理额外的行,我希望我的设计更加稳健。有没有办法从正则表达式中捕获以在 foreach 中使用?

I have outputs from a device I need to test and mostly the response is one line, but sometimes it is two lines. Which I handle with a simple regex parsing one or two lines

if ($prompt =~ /(\s.*?)\r\n(.*)/)
{
   Note('Multiline '.$string);
   TestPrompt($string, $1);
   TestPrompt($string, $2);
}
else
{
   TestPrompt($string, $prompt);
}

But what if the response is more than two lines? This code cannot handle the additional lines and I'd like to be robust in my design. Is there a way to capture from regex for use in a foreach?

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

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

发布评论

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

评论(3

绳情 2024-12-20 04:21:03

为什么不使用 split 函数来执行此操作?这是一些用法示例的链接。对于您的示例,为什么不这样做:

my @lines=split /\r\n/,$prompt;

Note("Multiline $string") if @lines>1; 

foreach my $line (@lines) 
{ 
   TestPrompt($string, $line);
} 

Why not use the split function instead to do this? Here is a link to some examples of usage. For your example, why not do this:

my @lines=split /\r\n/,$prompt;

Note("Multiline $string") if @lines>1; 

foreach my $line (@lines) 
{ 
   TestPrompt($string, $line);
} 
乄_柒ぐ汐 2024-12-20 04:21:03

您可以在换行符处拆分:

my @lines = split /\r\n/, $prompt;
foreach (@lines) {
    TestPrompt( $string, $_ );
}

You could split at newlines:

my @lines = split /\r\n/, $prompt;
foreach (@lines) {
    TestPrompt( $string, $_ );
}
昨迟人 2024-12-20 04:21:03

您可以在列表上下文中使用全局匹配:

    my @prompts = m{(\s*\S*?)\r\n}g;
    for my $prompt (@prompts) {
        print "$prompt\n";
    }

You could use a global match in list context:

    my @prompts = m{(\s*\S*?)\r\n}g;
    for my $prompt (@prompts) {
        print "$prompt\n";
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文