php düzenli ifade yardım için birden çok dosya adlarını bulmak değil sadece tam URL

3 Cevap php

Ben bütün bir cümle / paragraf içindeki dosya adlarını bulmak bulur php kullanıyorum normal bir ifade düzeltmek için çalışıyorum. Dosya adları her zaman bu gibi görünüyor:
/ bu-a-valid-page.php

Yardım i benim eski model ben olmamdı sorun tam adresler önler bu şekilde değiştirilmiştir SOF üzerine aldık, ancak bu model sadece dize içinde bir dize, hiçbir şey başında bir durum oluşmasına bulur.

/^\/(.*?).php/ 


I have a live example here: http://vzio.com/upload/reg_pattern.php

3 Cevap

Kaldır ^ - karat başka bir yerde değil eşleşen yüzden bir dize / hattının başlangıcı anlamına gelir.

Sadece boşluk şerit unutmayın - tam URL'leri engellemek için gerekiyorsa, (?:^|\s) hangi dizenin başlangıcı veya bir boşluk karakteri ya maç olacak gibi bir şey için ^ değiştirmek isteyebilirsiniz sonra üzerinde maçın başından itibaren.

O "bir şey" maç olacak beri ifadede son nokta hala sorunlara neden olabilir. Sen, o deseni ile, örneğin / somefilename # php maç olabilir. Bir edebi dönem yapmak için ters eğik çizgi:

/\/(.*?)\.php/

Ayrıca ? .* non-greedy gerekli yapmak için, ve Arda XI'ın desen çalışmaz unutmayın. O .php maç kadar .* kesinlikle istediğiniz şeyi olmadığı, bir anda dize sonuna kadar yarış ve daha sonra yedek bir karakter olacaktır.

Tüm tekrarlamalarını bulmak için, yerine start anchor and use the preg_match_all işlevini kaldırmak gerekecek preg_match:

if(preg_match_all('/\/(.*?)\.php/',$input,$matches)) {
 var_dump($matches[1]); // will print all filenames (after / and before .php)
}

Ayrıca . bir meta karakter. Sen \. değişmez bir süre maç olarak kaçmak gerekir.