2011-06-03 23 views
5

tengo una cadena que contiene UUID v4PHP preg_match UUID v4

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

¿Cómo puedo obtener el valor b85066fc-248f-4ea9-b13d-0858dbf4efc1 de lo anterior usando preg_match()?
Más información sobre v4 UUID se puede encontrar here

+0

no estoy seguro pero trate "^ (\ {{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

+0

Nuevamente, Rufinus, esto está mal, mira http://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29 – Artefact2

Respuesta

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

Y

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); 

también funciona. Tomado de here, pero no sé si podemos confiar en eso.

+0

No, esta expresión regular es demasiado permisivo – Artefact2

+0

La pregunta es cómo obtener el 'uuid' del enlace de esa manera, pero no desde ningún lugar, p. no de texto La definición de UUID es [aquí] (http://en.wikipedia.org/wiki/Uuid#Definition), así que supongo que mi segunda solución, que en realidad es robada, funcionaría correctamente para este propósito. – Nemoden

+12

Una expresión regular más estricta sería '/ [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}/' –

5

Puede probar este modelo simple para el UUID

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