2011-06-03 141 views
5

我有一个包含UUID v4PHP的preg_match UUID V4

$uuid = 'http://domain.com/images/123/b85066fc-248f-4ea9-b13d-0858dbf4efc1_small.jpg'; 

我怎么会得到从上面使用preg_match()b85066fc-248f-4ea9-b13d-0858dbf4efc1值的字符串? UUID的V4
更多信息,可以发现here

+0

不知道这个简单的模式,但试图“^(\ {{0,1}([0-9A-FA-F]){8} - ([0 -9a-FA-F]){4} - ([0-9A-FA-F]){4} - ([0-9A-FA-F]){4} - ([0-9A-FA- F]){12} \} {0,1})$“ – Rufinus 2011-06-03 05:13:30

+0

同样,Rufinus,这是错误的,请参阅http://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29 – Artefact2 2011-06-03 05:14:50

回答

11
$uuid = 'http://domain.com/images/123/b85066fc-248f-4ea9-b13d-0858dbf4efc1_small.jpg'; 
preg_match('!/images/\d+/([a-z0-9\-]*)_!i', $uuid, $m); 

而且

preg_match('/[a-f0-9]{8}\-[a-f0-9]{4}\-4[a-f0-9]{3}\-(8|9|a|b)[a-f0-9]{3‌​}\-[a-f0-9]{12}/', $uuid, $m); 

工作过。采取从here,但我不知道我们是否可以依靠这一点。

+0

不,这个正则表达式太宽容了。 – Artefact2 2011-06-03 05:15:18

+0

问题是如何从类似链接获得'uuid',但不能从任何地方获得,例如而不是来自文本。 UUID的定义是[这里](http://en.wikipedia.org/wiki/Uuid#Definition),所以我想我的第二个解决方案实际上是被盗的,可以用于这个目的。 – Nemoden 2011-06-03 05:20:48

+12

更严格的正则表达式可以是/ [a-f0-9] {8} \ - [a-f0-9] {4} \ - 4 [a-f0-9] {3} \ - (8 | 9 | a | f0-9] {3} \ - [a-f0-9] {12} /' – 2014-07-13 22:40:28

5

你可以尝试的UUID

preg_match('/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/',$uuid,$matches);