PHP dize yalnızca bir kısmını ayıklamak nasıl?

2 Cevap php

Ben, bir sonraki dize var ve ben image123.jpg ayıklamak istiyorum.

..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length

image123 herhangi bir uzunluk (newimage123456 vb) olabilir ve jpg, jpeg, gif veya png uzantılı. olabilir

Ben preg_match kullanmanız gerekir varsayalım, ama ben gerçekten emin değilim ve ben kullanabilir başka yollar veya fonksiyon varsa kod veya nasıl bilmek istiyorum.

Herhangi bir yardım takdir edilecektir.

2 Cevap

Sen kullanabilirsiniz:

if(preg_match('#".*?\/(.*?)"#',$str,$matches)) {
   $filename = $matches[1];
}

Alternatif preg_match kullanarak çift tırnak arasındaki yolun tamamını çıkarmak ve sonra işlevini kullanarak yolundan dosya ayıklamak basename :

if(preg_match('#"(.*?)"#',$str,$matches)) {
    $path = $matches[1]; // extract the entire path.
    $filename =  basename ($path); // extract file name from path.
}

Ne bu böyle bir şey:

$str = '..here_can_be_any_length "and_here_any_length/image123.jpg" and_here_also_any_length';
$m = array();
if (preg_match('#".*?/([^\.]+\.(jpg|jpeg|gif|png))"#', $str, $m)) {
    var_dump($m[1]);
}

Burada, size verecek:

string(12) "image123.jpg" 

Ben desen biraz daha basit olabilir varsayalım - Eğer örneğin, uzantısını kontrol ve dosya her türlü kabul edemiyordu; ama emin değilim sizin ihtiyaçlarınıza uygun olurdu.


Basically, here, the pattern :

  • a " ile başlar
  • kadar herhangi bir karakter sayısını alır /: .*?/
  • [^\.]+: sonra . olmayan herhangi sayıda karakter alır
  • daha sonra bir nokta için denetler: \.
  • sonra uzantısı geliyor - Eğer izin verdi onlardan biri: (jpg|jpeg|gif|png)
  • ve son olarak, kalıp uç, bir "

Ve dosya adına karşılık gelen desenin bütün bölümü () ile çevrilidir, bu nedenle çekilen var - $m iade