2011-05-25 13 views
5

Sé que el título de la pregunta parece muy repetitivo. Pero parte de la solución que no encontré aquí.¿Encontrar las URL de una cadena de texto a través de php y regex?

Tengo que encontrar las direcciones URL cadena de formato de texto:

$pattern = '`.*?((http|https)://[\w#$&+,\/:;[email protected]]+)[^\w#$&+,\/:;[email protected]]*?`i'; 

    if (preg_match_all($pattern,$url_string,$matches)) { 
     print_r($matches[1]); 
    } 

usando este patrón yo era capaz de encontrar las direcciones URL con http:// y https:// que es okey. Pero tengo la entrada del usuario, donde la gente agrega URL como www.domain.com incluso domain.com

lo tanto, necesito para validar la cadena de primera donde puedo reemplazar www.domain.comdomain.com con protocolo común http:// delante de ellos. O tengo que venir con más patrón bueno?

No soy bueno con regex y no sé qué hacer.

Mi idea es encontrar primero las direcciones URL con http:// y la https:// los pusieron en una matriz vuelva a colocar estos url con el espacio (" ") en la cadena de texto a continuación, utilizar otros patrones para ello. Pero no estoy seguro de qué patrón usar.

estoy usando este $url_string = preg_replace($pattern, ' ', $url_string);, sino que elimina en su caso www.domain.com o domain.com url entre dos URL válida con http:// o https://

Si usted puede ayudar a que será grande.

Para hacer las cosas más claras:

Necesito un patrón o algún otro método donde puedo encontrar todas las direcciones URL en una picadura de texto. el ejemplo de URL son:

  1. domain.com
  2. www.domain.com
  3. http://www.domain.com
  4. http://domain.com
  5. https://www.domain.com
  6. https://domain.com

gracias! 5.

+0

¿Está validando la entrada del usuario desde un formulario con un campo de URL? ¿O está raspando una página/bloque de texto para generar una lista de URL que se encuentran dentro de ella? Un ejemplo completo de la "cadena de texto" que está tratando de analizar podría ser útil. – baraboom

+0

@baraboom: sí, desde el cuadro de texto de entrada del usuario. donde la gente puede ingresar como este twitter: twitter.com/user facebook: http://facebook.com etc. – Sisir

Respuesta

3
$pattern = '#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]{2,4}\S*#i'; 
preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER); 
+0

¡Gracias! casi funcionó !! Aún necesita encontrar el patrón 'del dominio.com' – Sisir

+1

@Sisir reemplaza el '{1}' con un '?' para que http: // o www sean opcionales. –

+0

Esto no funciona para mí. Recibo un resultado vacío '$ pattern = '# (www \. | Https?: \/\ /) {?} [A-zA-Z0-9] {2,254} \. [A-zA-Z0-9] {2,4 }(\Si'; $ count = preg_match_all ($ patrón, 'http://www.Imaurl.com', $ coincidencias, PREG_PATTERN_ORDER); ' Y no hay ningún error de ' preg_last_error() ' – Shane

0

no estoy seguro de si he entendido correctamente lo que necesita, pero se puede usar algo como esto:

preg_match('#^.+?://#', $url); 

para encontrar si hay un protocolo especificado en la cadena, y si no solo anexar http://

Cuestiones relacionadas