Regex 如何使用perl正则表达式在模式匹配后提取后续单词?

Regex 如何使用perl正则表达式在模式匹配后提取后续单词?,regex,perl,strawberry-perl,Regex,Perl,Strawberry Perl,文件中的示例行: one two three uname whirlcano four five 我想从多个文件中提取用户名 foreach $file (@file_names) { open(my $fh, '<:encoding(UTF-8)', $file) or die "Could not open file '$file' $!"; while (my $row = <$fh>) { if($row =~ "u

文件中的示例行:

one two three uname whirlcano four five
我想从多个文件中提取用户名

foreach $file (@file_names)
{
    open(my $fh, '<:encoding(UTF-8)', $file)
    or die "Could not open file '$file' $!";

    while (my $row = <$fh>)
    {
        if($row =~  "uname")
        {
            #here I want to extract only the immediate word after "uname", which is "whirlcano" in the above example.
        }
    }
}
foreach$file(@file\u name)
{

打开(my$fh),您可以使用正则表达式捕获组捕获用户名:

while (my $row = <$fh>) {
    chomp($row); # strip newline character

    # capture first group of word characters after uname and one or more spaces
    my ($username) = $row =~ m/uname\s+(\w+)/;
    ....
}
while(我的$row=){
chomp($row)#带换行符
#捕获uname和一个或多个空格后的第一组单词字符
我的($username)=$row=~m/uname\s+(\w+)/;
....
}
在上面的示例中,您可以将
\s+
更改为您的文件具有的任何分隔符,但通常在使用真正的CSV解析器解析CSV类型的文件时,它比正则表达式要好。是一种流行的此类解析器


有关在正则表达式中捕获组的详细信息,请参阅Hi Hunter的捕获组部分,这些是没有标准分隔符的日志文件。上面的正则表达式返回“uname”而不是“whirlcano”。这可能是基本内容,但我不太擅长正则表达式。请帮助,谢谢。如果该行实际上是您在问题中提供的行,那么我提供的正则表达式将捕获用户名