如何使用regex(perl)在特定/静态字符串后查找值?

Obi*_*bie 3 regex perl parsing

我还在学习正则表达式,并且还有很长的路要走,所以非常感谢任何拥有更多正则表达式经验的人的帮助.我正在使用perl脚本来解析多个日志文件,并解析某些值.在这种情况下,我正在尝试获取用户名列表.

这是我的日志文件的样子:

  [date timestamp]UserName = Joe_Smith
  [date timestamp]IP Address = 10.10.10.10
Run Code Online (Sandbox Code Playgroud)

..

只是测试,我已经能够使用它\UserName\s\=\s\w+,但我只想要实际的UserName值,而不包括'UserName ='部分.理想情况下,如果我能让它工作,我应该能够应用相同的逻辑来提取IP地址等,但只是希望暂时得到用户名列表.

此外,用户名总是采用上面的格式Firstname_Lastname,所以我相信\ w +应该始终得到我需要的一切.

感谢任何帮助!

Bor*_*din 5

您应该使用正则表达式中的括号捕获您感兴趣的匹配字符串的一部分.

如果匹配成功,然后捕获是在内置变量可用$1,$2等等,在他们的左括号出现在正则表达式的顺序编号.

在这种情况下,您只需要一次捕获,因此您只需要查看$1.

请注意,在使用捕获变量中的值之前,应始终检查正则表达式匹配是否成功,因为它们保留上次成功匹配的值,并且失败的匹配不会重置它们.

use strict;
use warnings;

my $str = '[date timestamp]UserName = Joe_Smith';

if ($str =~ /UserName = (\w+)/) {
  print $1, "\n";
}
Run Code Online (Sandbox Code Playgroud)

产量

Joe_Smith
Run Code Online (Sandbox Code Playgroud)