如何使用 Perl 递归正则表达式
我需要测试设备的输出,大多数响应是一行,但有时是两行。我用一个简单的正则表达式解析一两行来处理它
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为什么不使用 split 函数来执行此操作?这是一些用法示例的链接。对于您的示例,为什么不这样做:
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:您可以在换行符处拆分:
You could split at newlines:
您可以在列表上下文中使用全局匹配:
You could use a global match in list context: