我正在尝试使用正则表达式捕获此字符串。它似乎没有产生任何匹配。
$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
答案 0 :(得分:1)
你忘记了一堆+
修饰符。你还忘记了正则表达式开头和结尾的分隔符。
preg_match('/\[\[resource:(\w+-\w+-\w+-\w+-\w+):/', $property, $matches);
^ ^ ^ ^
答案 1 :(得分:0)
作为旁注,你可以使用恰好符合十六进制字符的字符类[[:xdigit:]]
:
\[\[resource:([[:xdigit:]]+(?>-[[:xdigit:]]+){4}):