2015-05-02 8 views
5

alla ricerca di una soluzione PHP che troverà una corrispondenza la seguente espressione:bisogno regex per abbinare stringa contenente "http: //" e termina con estensione del file da serie

  1. URL contiene "http: // "(non necessariamente inizia con http: //) E
  2. L'URL termina con un'estensione di file da un array.

Esempio di estensione del file gamma

$filetypes = array(
jpg, 
gif, 
png, 
js, 
tif, 
pdf, 
doc, 
xls, 
xlsx, 
etc); 

Ecco il codice di lavoro desidero aggiornare con i requisiti di cui sopra:

In questo momento, questo codice funziona e restituisce solo URL che contengono "http : // "ma voglio includere anche il secondo requisito.

$i = 0; 
$matches = false; 
foreach($all_urls as $index => $value) { 
    if (preg_match('/http:/', $value)) { 
     $i++; 
     echo "[{$i}] {$value}<br>"; 
     $matches = true; 
    } 
} 
+0

Potete incollare l'URL del campione? –

+0

''http: // mattressandmore.com/wp-content/themes/barberry/js/fresco.js'' - Ho appena realizzato che l'estensione del file può finire con l'apostrofo e – user3436467

risposta

5

si può solo fare una chiamata in_array() nella vostra istruzione if in cui si controlla con pathinfo() se l'estensione è nella matrice $filetypes.

$i = 0; 
$matches = false; 
foreach($all_urls as $index => $value) { 
    if (preg_match('/http:/', $value) && in_array(pathinfo($value, PATHINFO_EXTENSION), $filetypes)) { 
     $i++; 
     echo "[{$i}] {$value}<br>"; 
     $matches = true; 
    } 
} 

EDIT:

Come lei ha detto nel comments che alcuni di URL contiene virgolette singole si può semplicemente utilizzare questo per sbarazzarsi di loro come @Ghost mostrato nei commenti:

trim($value, "'") 

utilizzarlo nella chiamata in_array() come segue:

in_array(pathinfo(trim($value, "'"), PATHINFO_EXTENSION), $filetypes) 
       //^^^^^^^^^^^^^^^^^ 
+0

grazie per una risposta così rapida, e vai a riferire – user3436467

+1

@ user3436467 prima che lo sappiamo, Rizier ha già completato il tuo progetto pezzo per pezzo: D lol – Ghost

+0

funziona a meraviglia! ma ho appena realizzato che alcuni URL contengono gli apostrofi alla fine dell'URL, comunque questo fattore è semplice, invece di duplicare tutti gli elementi dell'array con l'apostrofo? – user3436467

0

Una soluzione più semplice sarebbe utilizzando un semplice regex:

$i = 0; 
$matches = false; 
foreach($all_urls as $index => $value) { 
    if (preg_match("/^http:\/\/.+\.(jpg|gif|png|js|tif|pdf|doc|xls|xlsx|etc)$/", $value)) { 
     $i++; 
     echo "[{$i}] {$value}<br>"; 
     $matches = true; 
    } 
} 

Ciò garantirà la partita inizia con http: // (a causa del ^) e termina con la .jpg o anche (a causa della or'ed list e $).

Se si desidera supportare HTTPS si potrebbe utilizzare:

/^https?:\/\/.+\.(jpg|gif|png|js|tif|pdf|doc|xls|xlsx|etc)$/ 
+0

Oh leggi di nuovo la tua descrizione. Perché è, non dovrebbe iniziare con http? Allora non è obbligatorio terminare con l'estensione? –

Problemi correlati