regexp ile dosyadan numarası almak?

4 Cevap php

Ben adında dosyalar var

1234_crob.jpg
1234.jpg
2323_örja.bmp
2323.bmp
etc.

Nasıl sadece mesela numara alabilirsiniz 1234 ve 2323?

4 Cevap

Dosya isimlerinin hepsi normal ifadeler kullanmaya gerek yoktur numaraları ile başlarsanız, bunun yerine bu deneyin:

foreach (glob('/path/to/dir/{0,1,2,3,4,5,6,7,8,9}*', GLOB_BRACE) as $file)
{
    echo $file . ' = ' . intval(basename($file)) . "<br />\n";
}

Bu updated glob pattern will only match filenames that start with a digit, istediğiniz gibi.


@ghostdog74: Haklısın.

foreach (glob('/path/to/dir/{0,1,2,3,4,5,6,7,8,9}*', GLOB_BRACE) as $file)
{
    echo $file . ' = ' . filter_var(basename($file), FILTER_SANITIZE_NUMBER_INT) . "<br />\n";
}

İlk explode dönemi, ve sonra çizgi üzerine patlayabilir, ve sonra sayı döndürülen listedeki ilk unsurdur.

<?php
$str1 = "1234.jpg";
$str2 = "1234_crob.jpg";

$pieces = explode("_",current(explode(".",$str1)));
echo $pieces[0]; // prints 1234

$pieces = explode("_",current(explode(".",$str2)));
echo $pieces[0]; // prints 1234
?>

Evet, bu normal bir ifade değildir gerçekleştirmek, ancak bu normal ifadeler kullanmak için bir görev çok basit.

EDIT: Modified code to work for your newly edited formatting examples. EDIT: Modified to fit cleanly in one line of code.

Sadece dosya isimleri (ve filepaths) geçmek varsayarsak, aşağıdaki tüm ardışık sayılar 0-9 almak gerekir:

function getDigits($fn) {
    $arr = array();
    preg_match('/[0-9]+/', $fn, $arr);
    return $arr;
}

EXAMPLE USAGE

var_dump(getDigits('hey_12345.gif'));
/*
output:
array(1) {
  [0]=>
  string(5) "12345"
}
*/

var_dump(getDigits('123487_dude.jpg'));
/*
output:
array(1) {
  [0]=>
  string(6) "123487"
}
*/

Bu deneyin. Eğer 045_test.jpg gibi sayılar varsa, intval kullanarak size 45 yerine 045 verecek

$path="/path/[0-9]*";
foreach (glob($path) as $files ){
    $base=basename ($files);
    $s   = preg_split("/[^0-9]/",$base,2);
    echo $s[0]."\n";
}