Visualizzazione risultati 1 fino 4 di 4

Discussione: [PHP]Espressioni regolari

  1. #1
    Guest

    Predefinito [PHP]Espressioni regolari

    Ciao a tutti, sto cercando di capire come si usano l'espressioni regolari in php ma non capisco dove sbaglio in questo caso...
    Codice PHP:
    <?php
    $test
    = "ciao box.png";
    echo
    preg_replace('(.*)[(png)|(jpg)]$','<img src="\\2\\1">',$test);
    ?>
    Dovrebbe controllare se una stringa finise per ".png|.jpg|.jpeg|.gif|.bmp"
    e sostituire con il tag img di html....

    Ringrazio Anticipatamente... =)

  2. #2
    Guest

    Predefinito

    Non l'ho provata ma dovrebbe funzionare:

    Codice PHP:
    <?php
    $test
    = "ciao box.png";
    echo
    preg_replace('/^((?:.)+)\.(png|jpg|jpeg|gif|bmp)$/', '<img src="\\1.\\2" alt="\\1" />', $test);
    ?>
    /.../ Identifica la definizione del pattern

    ^ L'inizio della frase

    (...) blocco con back reference (che sarà \1) e al cui interno ha
    (?:.)+
    ?: evita di definire una back referense per questo blocco
    . qualsiasi carattere
    quindi (?:.)+ si legge un qualsiasi carattere ripetuto 1 o più volte

    \. identifica il punto (la barra evita di considerare . come carattere jolly)

    (png|jpg|jpeg|gif|bmp) Gruppo che identifica l'estensione (con back reference che sarà poi \2)

    $ fine frase.

  3. #3
    Guest

    Predefinito

    Ti ringrazio di aver risposto ma non funziona, ti spiego cosa devo fare... =)
    Dato un testo devo fare se trova un parola che finische per "png|jpg|jpeg|gif|bmp" la sostituisca con il tag img ma solo la prima parola che finische con queste estenzioni se invece ci sono due parole o più che finiscono con queste estenzione, dovrebbe ritornarmi il testo normale...
    es
    testo http://wwww.sito.com/ciao.png => testo <img src="http://wwww.sito.com/ciao.png">
    testo http://sito.com/ciao.png => testo <img src="http://wwww.sito.com/ciao.png">
    testo wwww.sito.com/ciao.png => testo <img src="http://wwww.sito.com/ciao.png">
    testo sito.com/ciao.png => testo <img src="http://wwww.sito.com/ciao.png">
    invece
    testo sito.com/ciao.png sito.com/ciao2.png => testo http://wwww.sito.com/ciao.png http://wwww.sito.com/ciao.png

    Secondo te dove sbaglio....
    "#^http\\:\\/\\/[a-z0-9\-]+\.([a-z0-9\-]+\.)?[a-z]+#i((?:.)+)\.(png|jpg|jpeg|gif|bmp)$/"

  4. #4
    Guest

    Predefinito

    Citazione Originalmente inviato da hotmailpower Visualizza messaggio
    Ti ringrazio di aver risposto ma non funziona, ti spiego cosa devo fare... =)
    Dato un testo devo fare se trova un parola che finische per "png|jpg|jpeg|gif|bmp" la sostituisca con il tag img ma solo la prima parola che finische con queste estenzioni se invece ci sono due parole o più che finiscono con queste estenzione, dovrebbe ritornarmi il testo normale...
    es
    testo http://wwww.sito.com/ciao.png => testo <img src="http://wwww.sito.com/ciao.png">
    testo http://sito.com/ciao.png => testo <img src="http://wwww.sito.com/ciao.png">
    testo wwww.sito.com/ciao.png => testo <img src="http://wwww.sito.com/ciao.png">
    testo sito.com/ciao.png => testo <img src="http://wwww.sito.com/ciao.png">
    invece
    testo sito.com/ciao.png sito.com/ciao2.png => testo http://wwww.sito.com/ciao.png http://wwww.sito.com/ciao.png

    Secondo te dove sbaglio....
    "#^http\\:\\/\\/[a-z0-9\-]+\.([a-z0-9\-]+\.)?[a-z]+#i((?:.)+)\.(png|jpg|jpeg|gif|bmp)$/"
    Secondo me quello che vuoi, per una sola regex è troppo.
    Stai chiedendo di valutare se inizia con http://, con www, con http://www, ... e poi li vuoi riportare tutti a http://www...

    devi iniziare a suddividere i casi.
    Personalmente non trovo corretta questa uniformità forzata. In rete ci sono tanti risorse disponibili solo con www, solo senza, o indistindamente con o sensa www.

    Quindi come di comporti se l'immagine a.jpg è disponibile per sito.com/a.jpg ma non per www.sito.com/a.jpg?

    Ritornando al tuo pattern, innanzitutto, devi racchiuderlo tra / ... /, poi non mi pare che i due punti abbiano bisogno di \\.
    Come l'hai scritta, per matchare un testo indubbiamente deve iniziare per http ... e non mi pare che è quello che vuoi.

    il Pattern che ti dato, sicuramente ha match con qualunque stringa che finisca con le estensioni elencate, tutte. Il problema è il riportarle alla forma "normalizzata" http://www...

    Per evitare l'ultimo caso potresti prima contare quante occorrenze sono state trovate e nel caso questo numero sia >1 non procedere alla sostituzione...

Regole di scrittura

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