Analizador de código incrustado de Youtube y Vimeo con PCRE Regex

He estado trabajando en un analizador de código incrustado de Youtube y Vimeo, estoy tratando de resolver el problema usando expresiones regulares.

Encontré dos patrones y están trabajando con la función eregi() pero desafortunadamente no funciona con preg_match(). Da el error "El delimitador no debe ser alfanumérico ni barra invertida".

¿Cómo puedo convertir estos patrones de POSIX a PCRE?

para Youtube;

\/v\/(.{11})|\/embed\/(.{11})

para Vimeo;

player\.vimeo\.com\/video/([0-9]*)"

preguntado el 21 de mayo de 12 a las 18:05

La última comilla doble al final es un error de copiar y pegar, ¿verdad? -

2 Respuestas

Esto es para youtube:$pattern = '/\/v\/(.{11})|\/embed\/(.{11})/';

Y eso es para Vimeo: $pattern = '/player\.vimeo\.com\/video\/([0-9]*)/';

Cuando utilice PCRE, asegúrese de encerrar la expresión en /expression/ (barras), y escapar también todos los /. Noté que a veces lo haces, a veces no...

contestado el 21 de mayo de 12 a las 18:05

Encontré esta útil en un sitio que ayudo a desarrollar. gracias y credito a ridgerunner.

// Linkify youtube URLs which are not already links.
function linkifyYouTubeURLs($text) {
    $text = preg_replace('~
        # Match non-linked youtube URL in the wild. (Rev:20111012)
        https?://         # Required scheme. Either http or https.
        (?:[0-9A-Z-]+\.)? # Optional subdomain.
        (?:               # Group host alternatives.
          youtu\.be/      # Either youtu.be,
        | youtube\.com    # or youtube.com followed by
          \S*             # Allow anything up to VIDEO_ID,
          [^\w\-\s]       # but char before ID is non-ID char.
        )                 # End host alternatives.
        ([\w\-]{11})      # $1: VIDEO_ID is exactly 11 chars.
        (?=[^\w\-]|$)     # Assert next char is non-ID or EOS.
        (?!               # Assert URL is not pre-linked.
          [?=&+%\w]*      # Allow URL (query) remainder.
          (?:             # Group pre-linked alternatives.
            [\'"][^<>]*>  # Either inside a start tag,
          | </a>          # or inside <a> element text contents.
          )               # End recognized pre-linked alts.
        )                 # End negative lookahead assertion.
        [?=&+%\w-]*        # Consume any URL (query) remainder.
        ~ix', 
        '<a href="http://www.youtube.com/watch?v=$1">YouTube link: $1</a>',
        $text);
    return $text;
}

Debería poder eliminar lo que necesita de allí, y maneja todos los estilos de enlaces de YouTube. Vimeo no debería ser demasiado difícil a partir de ahí.

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.