Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [regex] match url

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    111

    [regex] match url

    Codice PHP:
    /!(\[url\=|\[url\])(http\:\/\/|http\:\/\/www\.|www\.|https\:\/\/|https\:\/\/www\.|ftp\:\/\/))(.*?)\s/is 
    ho appena iniziato ad usare i pattern regex e non ho le idee molto chiare. il mio scopo sarebbe quello di avere un match con un url, sfruttando la parte iniziale dell'indirizzo che ha solo poche varianti (http, https, ftp) e lo spazio vuoto successivo. Inoltre l'indirizzo non deve essere preceduto da
    Codice PHP:
    [url=
    oppure
    [url
    perchè gli indirizzi inseriti con il bbcode li intercetto già con altri 2 pattern. ossia
    Codice PHP:
    /\[url\=(.*?)\](.*?)\[\/url\]/is 
    ho piazzato quel punto esclamativo all'inizio del primo gruppo () perchè voglio che quella parte venga esclusa ma non ho ancora capito quale sia la sintassi corretta.

    ringrazio chiunque voglia dare una mano

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    111
    sono spariti tutti gli escape \ dal codice :S

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    111
    '/\[url\=(.*?)\](.*?)\[\/url\]/is',
    '/\[url\](.*?)\[\/url\]/is',
    '/(??<!(href\=\"|\s\>|\[url\]|\[url\=)))(http\:\/\/|https\:\/\/|ftp\:\/\/)(.*?)(?\s|\[|\<))/is'

    da sostituire rispettivamente con:

    '$2',
    '$1',
    '$1$2'

    sono sulla strada giusta?

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    111
    per favore qualcuno potrebbe aiutarmi a capire perchè ricevo questo errore dal server?
    Warning: preg_replace() [function.preg-replace]: Compilation failed: lookbehind assertion is not fixed length at offset 38 in C:\www\HOUSE\includes\funzioni.php on line 107
    a me sembra che la lookbehind abbia come argomento delle stringhe di lunghezza ben definita, e non sta scritto da nessuna parte che non posso usare (|), anzi...
    fatto sta che l'errore sparisce se tolgo il booleano (insomma questo "|").
    dov'è l'errore?
    grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    111
    ce l'ho fatta. grazie a tutti dell'aiuto, anche se nessuno ha risposto so che vi stavate tutti scervellando per cercare la soluzione :rollo:


    '/(?: (?<!href\=\"|\[url\=|\[url\]))(http\:\/\/|https\:\/\/|ftp\:\/\/)+(.*?)(?: (?!\]|\[\/url\]|\"))(?=(\s|\[|\<|$|\z))/is'

    spiego, dovesse servire a qualcuno di inesperto come me:

    ?: (?<!href\=\"|\[url\=|\[url\]))
    ?: indica che il contenuto del blocco non verrà trattato come variabile
    ?<! è la sintassi per la negative lookbehind che indica che l'indirizzo non deve essere preceduto da href=" [url= oppure [url ].

    (h.ttp\:\/\/|h.ttps\:\/\/|f.tp\:\/\/)
    serve a riconoscere l'indirizzo, che deve necessariamente iniziare con http etc.. si possono aggiungere anche i www ma bisogna trovare il modo di inserire h.ttp:// davanti senno il link non funziona. il contenuto di questo blocco è una variabile il cui valore sarà una delle opzioni (chiaramente ho dovuto aggiungere i puntini senno l'engine di questo forum li avrebbe riconosciuti come indirizzi)

    +(.*?)
    combacia con una stringa di qualsiasi carattere di qualsiasi lunghezza finchè non arriva la sequenza di caratteri di stop, indicata di seguito. la stringa sarà una seconda variabile

    (?: (?!\]|\[\/url\]|\"))
    questo blocco non è una variabile.
    ?! è la sintassi per la negative lookahead che dice che la stringa non dovrà essere seguita da ] o [/ url] o ".

    (?: (?=\s|\[|\<|$|\z))
    nemmeno l'ultimo blocco è una variabile. esso contiene i caratteri di stop sopra menzionati.
    ?= è la sintassi per la positive lookahead, che dice che la stringa che ci interessa dovrà necessariamente essere seguita da \s (spazio), [ (inizio nuovo tag bbcode non ancora codificato), < (inizio nuovo tag html), $ (fine della riga), \z (fine dell'input).

    buona fortuna..

  6. #6
    Originariamente inviato da v.1
    sono spariti tutti gli escape \ dal codice :S
    Quando usi il campo PHP per inserire codice, raddoppia sempre i simboli di escape se vuoi che ne compaia almeno 1!

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.