2013-01-24 29 views
6

Có thể khớp một số chữ số tùy ý với hàm glob php không? Tôi đang cố gắng để phù hợp với tên tập tin cho hình thu nhỏ hình ảnh mà kết thúc với kích thước khác nhau, từ hai đến bốn chữ số.Kết hợp mẫu cụm từ php cho số trọng số của các số

Tôi biết tôi có thể cung cấp một loạt con số, nhưng điều này chỉ phù hợp với một nhân vật duy nhất:

glob("thumbname-[0-9]-[0-9].jpg") 

này sẽ phù hợp thumbname-1-1.jpg nhưng không thumbname-10-10.jpg vv

Trả lời

3

Hãy thử sử dụng: glob("thumbname-[0-9]*-[0-9]*.jpg")

Tôi đã thực hiện kiểm tra và nó phù hợp với tôi.

+3

Điều này có thể đủ tốt, mặc dù nó sẽ khớp với hình thu nhỏ-1a-1b.jpg – baseten

+0

Điều này có vẻ là tốt nhất mà glob có thể đạt được, nhưng cuối cùng nó quá mơ hồ vì nó cũng sẽ phù hợp với hình thu nhỏ-2-1-1.jpg. Tôi đã kết thúc bằng cách sử dụng RegexIterator với regex tôi đăng trong các ý kiến ​​ – baseten

+0

nó sẽ làm việc để glob ("hình thu nhỏ- [0-9] + - [0-9] +. Jpg")? Nếu nó chỉ là số ... – Tebe

4

Thay thế cho glob(), sử dụng recursiveDirectoryIterator với một regexp

$Directory = new RecursiveDirectoryIterator('path/to/project/'); 
$Iterator = new RecursiveIteratorIterator($Directory); 
$Regex = new RegexIterator($Iterator, 
    '/^thumbname-[0-9]*-[0-9]*\.jpg$/i', 
    RecursiveRegexIterator::GET_MATCH 
); 
+0

Cảm ơn, tôi có thể đi với phương pháp này thực sự như regex sẽ cho tôi kiểm soát nhiều hơn về mô hình. Tôi đã chấp nhận câu trả lời glob mặc dù nó là câu hỏi ban đầu. – baseten

+0

Tôi đã đi với phương pháp này cuối cùng là mô hình glob quá mơ hồ. Tôi đã tìm thấy nó sẽ phù hợp với hình thu nhỏ-2-1-1.jpg mà loại bỏ các tập tin bổ sung. Regex tôi đã kết thúc bằng cách sử dụng là: '/^thumbname-[0-9]+-[0-9]+(@2x)?\.(jpg |jpeg|gif|png)$/i' vì điều này đã cho tôi chỉ số chữ số thực và hậu tố võng mạc tùy chọn – baseten

+0

Chỉ cần nhận thấy rằng nó có vẻ thất bại với sự bắt đầu của dòng neo^có vẻ như đường dẫn tập tin đầy đủ được kiểm tra bởi RegexIterator không chỉ tên tập tin? – baseten

0

Bạn có thể chia số vào mảng glob khác nhau và hợp nhất chúng.

Ví dụ đầu tiên bạn thực hiện tất cả các hình ảnh từ 0-9 thành một mảng:

$g1 = glob('thumbname-[0-9].jpg'); 

Sau đó bạn tạo một mảng mà giữ số 10-99:

$g2 = glob('thumbname-[0-9][0-9].jpg'); 

Bây giờ bạn hợp nhất 2 mảng đó thành một và nhận tất cả từ 0-99:

$gResult = array_merge($g1, $g2); 

Bạn có thể mở rộng phạm vi bạn chỉ cần thêm [0-9]

Các vấn đề liên quan