Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在perl中通过正则表达式从行中提取GUID_Regex_Perl_Expression_Guid - Fatal编程技术网

Regex 在perl中通过正则表达式从行中提取GUID

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-

我在测试以及何时成功地从文本文件的一行提取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-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;