Regex 在perl中通过正则表达式从行中提取GUID
我在测试以及何时成功地从文本文件的一行提取GUID时遇到问题。给定一个guid 12345678-1234-1234-1234-123456789abc,其中允许使用所有十六进制字符(我使用数字和abc显示每个子字符串包含的字符数),我这样尝试Regex 在perl中通过正则表达式从行中提取GUID,regex,perl,expression,guid,Regex,Perl,Expression,Guid,我在测试以及何时成功地从文本文件的一行提取GUID时遇到问题。给定一个guid 12345678-1234-1234-1234-123456789abc,其中允许使用所有十六进制字符(我使用数字和abc显示每个子字符串包含的字符数),我这样尝试 my $myline = " set whatevervariable = \'aaaaaaaa-bbbb-cccc-1234-aaaaaaaabbbb\'"; my $guid =($myline =~ m/[A-Fa-f0-9]{8}[\-][A-
my $myline = " set whatevervariable = \'aaaaaaaa-bbbb-cccc-1234-aaaaaaaabbbb\'";
my $guid =($myline =~ m/[A-Fa-f0-9]{8}[\-][A-Fa-f0-9]{4}[\-][A-Fa-f0-9]{4}[\-][A-Fa-f0-9]{4}[\-]([A-Fa-f0-9]){12}/gi)
测试工作得很好,但是如何在以后提取GUID并将其用作perl脚本中的字符串呢?[]运算符不工作
谢谢你的帮助,
G.使用组:
my $guid =($myline =~ m/([A-Fa-f0-9]{8}[\-][A-Fa-f0-9]{4}[\-][A-Fa-f0-9]{4}[\-][A-Fa-f0-9]{4}[\-]([A-Fa-f0-9]){12})/gi)
# note parens here __^ and here __^
您还可以简化正则表达式:
my $guid =($myline =~ m/([a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-([a-f\d]){12})/gi)
根据daxim的评论,您需要添加a
修饰符:
my $guid =($myline =~ m/([a-f\d]{8}-[a-f\d]{4}-[a-f\d]{4}-[a-f\d]{4}-([a-f\d]){12})/gia)
或使用
my $guid =($myline =~ m/([[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-([[:xdigit:]]){12})/gia)
有两个变化:
$variable=$some\u other=~m/../g;-$变量将包含匹配数。如果想要匹配,应该执行以下操作:
my($variable)=……`。如果文件中实际存在多个guid的更改,请使用:my@guids=$myline=~m/…/g李>
另外-由于您使用的是//i标志,因此不需要使用[A-Fa-f]-简单的[A-f]就足够了。更重要的是,你不必做[-]件事角色在regexps中不是神奇的
这一切总计为:
my @guids = $myline =~ m/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/gi;
啊,那太好了!谢谢你的分组提示!简化是错误的@达克西姆:你说得对,相应地编辑答案。但这取决于地区。谢谢你的解释。我已经从regexp中删除了大写字符。。。
my @guids = $myline =~ m/([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/gi;