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”。这可能是基本内容,但我不太擅长正则表达式。请帮助,谢谢。如果该行实际上是您在问题中提供的行,那么我提供的正则表达式将捕获用户名