2012-01-12 11 views
6

Tengo la siguiente URL: www.exampe.com/id/1234 y quiero una expresión regular que obtenga el valor del parámetro de identificación que en este caso es 1234.¿Cómo usar Regex look behind?

me trataron

<?php 
$url = "www.exampe.com/id/1234"; 
preg_match("/\d+(?<=id\/[\d])/",$url,$matches); 
print_r($matches); 
?> 

y tiene Array ([0] => 1), que está mostrando sólo el primer dígito.

La pregunta es, ¿cómo reescribo la expresión regular para obtener todos los dígitos usando una mirada positiva?

+3

¿por qué quiere echar un vistazo atrás? –

+0

Estaba tratando de resolver un problema más complicado y estoy usando este ejemplo para hacerlo simple. –

Respuesta

10

¿Por qué no solo preg_match('(id/(\d+))', $url, $matches) sin ningún lookbehind? El resultado será en $matches[1].

Por cierto, la expresión lookbehind correcta sería ((?<=id/)\d+), pero realmente no debería usar lookbehind a menos que lo necesite.

Otra alternativa es (id/\K\d+) (\K restablece el inicio del partido y se utiliza a menudo como un aspecto más poderoso detrás).

+0

Muchas gracias. Mi principal preocupación era descubrir por qué la mirada detrás no funcionaba. No estoy familiarizado con '\ K' pero lo investigaré. –

+0

+ para la gran idea con '\ K' thx – Thielicious

6

Estoy de acuerdo con NikiC en que no necesita usar lookbehind; pero ya que usted pregunta — puede escribir

<?php 
$url = "www.exampe.com/id/1234"; 
preg_match("/(?<=id\/)\d+/",$url,$matches); 
print_r($matches); 
?> 
+0

Funciona. Exactamente lo que quería. –

Cuestiones relacionadas