尝试使用正则表达式捕获以下字符串

时间:2014-06-11 20:11:20

标签: php regex

我正在尝试使用正则表达式捕获此字符串。它似乎没有产生任何匹配。

  $property = "[[resource:76e9e8b2-788a-407f-a285-4728be19f71f:";

  if(!is_array($property)) {
  preg_match("\[\[resource:(\w+-\w-\w-\w-\w):", $property, $matches);
  print_r($matches[1]);
  }

据我所知,带有破折号的字母数字序列应该放到$ matches变量中 - 但实际上,当我print_r()变量输出时,我什么都没得到。

那么如何在$ matches数组中获得匹配。

最终我希望能得到的是:

76e9e8b2-788a-407f-a285-4728be19f71f

2 个答案:

答案 0 :(得分:1)

你忘记了一堆+修饰符。你还忘记了正则表达式开头和结尾的分隔符。

preg_match('/\[\[resource:(\w+-\w+-\w+-\w+-\w+):/', $property, $matches);
                                 ^   ^   ^   ^

答案 1 :(得分:0)

作为旁注,你可以使用恰好符合十六进制字符的字符类[[:xdigit:]]

\[\[resource:([[:xdigit:]]+(?>-[[:xdigit:]]+){4}):