Visualizzazione risultati 1 fino 10 di 10

Discussione: [PHP]Regex youtube

  1. #1
    Guest

    Predefinito [PHP]Regex youtube

    Ciao a tutti, devo controllare se in un testo contiene un link su youtube...
    Ho impostato il codice cosi...

    Codice PHP:
    <?php
    function You($name){
    return
    substr($name,strpos($name,"=")+1);
    }

    $pattern = array(
    '#(?:<\>]+href=\")?(?:http://)?((?:[a-zA-Z]{1,4}\.)?youtube.com/(?:watch)?\?v=(.{11}?))[^"]*(?:\"[^\<\>]*>)?([^\<\>]*)(?:)?#',
    );

    $replacements = array(
    'link = ', //Come richiamo la funzione
    );
    ?>

  2. #2
    Guest

    Predefinito

    Io non ho capito nulla. Ne la richiesta (qual è?) ne del codice (che hai scritto?, cosa vuoi fare?, dove hai preso quella regex?)

  3. #3
    Guest

    Predefinito

    ti faccio un esempio:
    se nel testo trovo scritto questo

    Ciao http://www.youtube.com/watch?v=mlYyystdGNY
    dovrebbe restituirmi
    Ciao link = mlYyystdGNY

    la funzione fa proprio questo calcola il testo dopo uguale ma il problema come posso fare a richiamare la funzione dentro un array...

  4. #4
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Se ho capito bene, c'è il modificatore e. Ti faccio un esempio di utilizzo:

    Codice PHP:
    echo preg_replace('#(.+)#e', 'funzione(\'$1\');', $testo);

    Tuttavia credo tu possa risparmiare un pò di codice, mettere ordine e cercare di migliorare le prestazioni cambiando logica e combinando funzioni specifiche come parse_url, parse_str e così via.

    Saluti!

  5. #5
    Guest

    Predefinito

    Ti ringrazio di aver risposto ma non ho capito bene in che modo posso risolvere il mio problema...
    io poi faccio cosi
    Codice PHP:
    <?php echo preg_replace($pattern,$replacements,htmlentities($n["text"],ENT_QUOTES)); ?>
    Controllando se nel testo ci sono bbcode uno di questi e vedere se ce un link di youtube se si devo prendere la parte dopo l'uguale e stamparla.... =)
    Ultima modifica di alemoppo : 20-09-2011 alle ore 15.54.41 Motivo: +tag [php]

  6. #6
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Controllando se nel testo ci sono bbcode uno di questi e vedere se ce un link di youtube se si devo prendere la parte dopo l'uguale e stamparla.... =)
    Appunto, quest'ultimo compito lo esegue la funzione You(), no?

    Con il modificatore che ti ho indicato nel mio post precedente puoi fare in modo che ogni volta che avviene una sostituzione sia chiamata una funzione, passando come parametro il testo trovato dall'espressione regolare.

    Guarda con attenzione l'esempio che ti ho postato. Basta che aggiungi "e" come modificatore in ogni pattern e imposti $replacements affinchè sia invocata la funzione You().

    Saluti!

  7. #7
    Guest

    Predefinito

    Thx funziona pero non capisco dove sbaglio...
    Codice PHP:
    <?php
    function You($name){
    return
    substr($name,strpos($name,"=")+1);
    }

    $pattern = array(
    '/\[b\](.*)\[\/b\]/',
    '#(?:<\>]+href=\")?(?:[url]http://)?((?:[/url][a-zA-Z]{1,4}\.)?youtube.com/(?:watch)?\?v=(.{11}?))[^"]*(?:\"[^\<\>]*>)?([^\<\>]*)(?:)?#e'
    );

    $replacements = array(
    '<b>\\1</b>',
    '<br><div><object data="http://www.youtube.com/v/You(\'$1\');&amp;hl=it&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" width="320px" height="245px">
    <param name="movie" value="http://www.youtube.com/v/You(\'$1\');&amp;hl=it&amp;fs=1&amp;rel=0">
    </object></div>'
    ,
    );
    echo
    preg_replace($pattern,$replacements,htmlentities($n["text"],ENT_QUOTES)); ?>
    Stampa questo mess
    Parse error: syntax error, unexpected '<' in /membri2/.....
    Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: &lt;br&gt;&lt;div&gt;&lt;object data=&quot;http://www.youtube.com/v/You(&#39;youtub...mp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;320px&quot; height=&quot;245px&quot;&gt; &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/You(&#39;youtub...el=0&quot;&gt; &lt;/object&gt;&lt;/div&gt; in /membri2/......
    Ultima modifica di hotmailpower : 20-09-2011 alle ore 18.05.44

  8. #8
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Non va bene, interpretando $replacements[1] avresti un errore. Praticamente tu è come se avessi fatto questo:

    Codice PHP:
    echo '<br><div><object data="http://www.youtube.com/v/You(\'...\');&amp;hl=it&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" width="320px" height="245px"><param name="movie" value="http://www.youtube.com/v/You(\'...\');&amp;hl=it&amp;fs=1&amp;rel=0"></object></div>';
    In quel modo non ti chiamerebbe You(), dovresti concatenare la chiamata alla funzione con il testo.

    Per evitare problemi con le virgolette ti consiglio, se puoi, di far restituire l'html direttamente alla funzione. In questo modo:

    Codice PHP:
    function You($name){
    $v = substr($name,strpos($name,"=")+1);
    return
    '<br><div><object data="http://www.youtube.com/v/'. $v. '&amp;hl=it&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" width="320px" height="245px"><param name="movie" value="http://www.youtube.com/v/'. $v. '&amp;hl=it&amp;fs=1&amp;rel=0"></object></div>';
    }
    Di conseguenza in $replacements[1] lasceresti soltanto la chiamata alla funzione:

    Codice PHP:
    $replacements = array(
    '<b>\\1</b>',
    'You(\'$1\')',
    );
    Saluti!
    Ultima modifica di programmazioned : 20-09-2011 alle ore 19.52.56

  9. #9
    Guest

    Predefinito

    Lo pensato anch'io solo che volevo evitare di usare la funzione in questo modo...
    xD

    p.s.
    se scrivo cosi http://www.youtube.com/watch?v=vSkb0kDacjs stampa anche http:/ e poi in codice nella funzione
    se scrivo cosi www.youtube.com/watch?v=vSkb0kDacjs stampa anche www. e poi in codice nella funzione
    se scrivo cosi youtube.com/watch?v=vSkb0kDacjs stampa correttamente
    se scrivo cosi http://youtube.com/watch?v=vSkb0kDacjs stampa anche http:// e poi in codice nella funzione

    Vorrei evitare che stampi cose in più nel pattern cosa sbaglio...

    Ti ringrazio di aver risposto =)

  10. #10
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Lo pensato anch'io solo che volevo evitare di usare la funzione in questo modo... xD
    Beh, come darti torto... :D
    Se vuoi usare $replacements[1] per contenere il codice, invece della funzione:
    Codice PHP:
    $replacements = array(
    '<b>\\1</b>',
    '\'<br><div><object data="http://www.youtube.com/v/\'.You(\'\\1\').\'&amp;hl=it&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" width="320px" height="245px"><param name="movie" value="http://www.youtube.com/v/\'.You(\'\\1\').\' &amp;hl=it&amp;fs=1&amp;rel=0"></object></div>\''
    );
    Ovviamente ricordati di rimettere a posto You().

    Per quanto riguarda l'espressione regolare, è tanto complicata che non penso di poterti aiutare, purtroppo.

    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •