2011-05-10 21 views

Respuesta

14

Prueba esto:

^https?://(www\.)?twitter\.com/(#!/)?(?<name>[^/]+)(/\w+)*$ 

El grupo "nombre" sub contendrá el nombre de usuario de Twitter.
Esta expresión regular asume que cada URL está en su propia línea.


Para utilizarlo en JS, utilice esto:

^https?://(www\.)?twitter\.com/(#!/)?([^/]+)(/\w+)*$ 

El resultado está en el subgrupo de $ 3.

+0

¿En qué idioma es eso? JS no es compatible con estos grupos nombrados? – Rudie

+0

Es C#. Consulte la actualización para ver un ejemplo que debería funcionar en JS. –

+1

Para JS con barras y escapó: '/^https?:\/\/(www\.)?twitter\.com\/(#!\/)?([^\/]+)(\/\w+) * $/' –

1

Esta expresión regular coincide con las cuatro URL determinadas. El nombre de usuario está presente en $ 1

m[twitter\.com/+(?:#!/+)?(\w+)] 

Utilice esta opción para comprobar

perl -le '$_="<url>"; m[twitter\.com/+(?:#!/+)?(\w+)]; print $1' 
0

Esta funciona para mí (en PHP): /twitter\.com(?:\/\#!)?\/(\w+)/i

20

hay un par más casos de prueba para hacer una expresión regular universal.

  • https URLs son también válidos
  • URLs como twitter.com/@username también van al perfil de usuario

Esto debería hacer el truco en PHP

preg_match("|https?://(www\.)?twitter\.com/(#!/)[email protected]?([^/]*)|", $twitterUrl, $matches); 

Si preg_match devuelve 1 (un partido) entonces el resultado está en $matches[3]

+0

Gracias. Su funcionamiento –

+1

Gracias a trabajar perfecto excepto que hay como 3 índices vacíos para limpiar para obtener '$ matches [1]' so '$ matches = array_values ​​(array_filter ($ matches));' –

6

esta expresión regular funciona bien en jQuery

$('#inputTwitter').blur(function() { 
     var twitterUserName = $(this).val(); 
     $(this).val(twitterUserName.match(/https?:\/\/(www\.)?twitter\.com\/(#!\/)[email protected]?([^\/]*)/)[3]) 

}); 
3

respuesta de Lombo es mi favorito, pero será glom cualquier cadena de consulta con el resultado:

http://www.twitter.com/#!/donttrythis?source=internet

dará lugar a un nombre de usuario de "donttrythis ?fuente = Internet"

Me modificarlo para que sea:

preg_match("|https?://(www\.)?twitter\.com/(#!/)[email protected]?([^/\?]*)|", $twitterUrl, $matches); 

Adición \? a la clase de caracteres excluidos después de que el nombre de usuario asegura se excluye la cadena de consulta

2

Ésta se basa en Lombo de. respuesta, funciona sin http (s) también es menos hambre (no mantener espacios después del nombre de usuario) y devuelve el resultado en la primera

Compruebe en acción:. https://regex101.com/r/xI2vF3/3

Para JS:

(?:https?:\/\/)?(?:www\.)?twitter\.com\/(?:#!\/)[email protected]?([^\/\?\s]*) 
+0

mejor respuesta, creo –

0

me encontré con la respuesta de Lombo funcionar mejor excepto que no funcionaría si la URL era www.twitter.com/example. Lo siguiente me funciona en www también.

$dirty_twitter = array('https://twitter.com/', 'http://twitter.com/', 'www.twitter.com/', 'https://www.twitter.com/', 'http://www.twitter.com/', 'twitter.com/'); 
    $clean_twitter = str_replace($dirty_twitter, '', $clean_twitter);