2010-07-26 13 views
11

Mam dwa ciągi przykład Nazwa pliku:Regex: jak dopasować ostatnią kropkę w ciąg

jquery.ui.min.js 
jquery.ui.min.css 

Co regex mogę użyć tylko pasują do ostatniej kropce? Nie potrzebuję niczego innego, tylko ostatnią kropkę.

Trochę więcej o tym, co robię. Używam funkcji preg_split() PHP, aby podzielić nazwę pliku na tablicę. Funkcja usuwa wszelkie dopasowania i daje tablicę z elementami między podziałami. Próbuję dostać go podzielić jquery.ui.min.js do tablicy, która wygląda następująco:

array[0] = jquery.ui.min 
array[1] = js 
+0

Dopasowane ostatni punkt nie jest trudne, to będzie ci dać '.' jako wynik. Masz na myśli "wszystko po ostatniej kropce", tj. "Rozszerzenie"? – deceze

+0

Chcę tylko ostatniej kropki i nic więcej. Ustaliłem dopasowanie do rozszerzenia za pomocą \ .. [^ \.] + $ Teraz muszę samemu uzyskać kropkę. –

Odpowiedz

11

Myślę, że będziesz mieć problemy z używaniem preg_split, preg_match, co powinno być lepszym wyborem.

preg_match('/(.*)\.([^.]*)$/', $filename, $matches); 

Alternatywnie, spójrz na pathinfo.
Albo zrobić to w bardzo prosty sposób w dwóch liniach:

$filename = substr($file, 0, strrpos($file, '.')); 
$extension = substr($file, strrpos($file, '.') + 1); 
+0

Cool! pathinfo() robi dokładnie to, czego potrzebowałem. Dziękuję Ci! –

+0

uzgodnione. Nie ma powodu, dla którego należy użyć wyrażenia regularnego. –

+1

Chociaż nie ma przykładu na php.net, 'pathinfo' działa również z zewnętrznym adresem URL. Więc 'pathinfo ('http://somehost.com/some/path/some.file')' działa również. – RaphaelDDL

8

Jeśli szukasz wyodrębnić ostatnią część napisu, ty” d potrzeba:

\.([^.]*)$ 

jeśli nie chcesz . lub

(\.[^.]*)$ 

jeśli nie.

+0

Właśnie tego szukałem. Użyto go do dodania _small do adresu URL pliku tuż przed rozszerzeniem pliku (i wszelkich parametrów za nim). var prodImg = cartItem.image.replace (/(\.[^.]*)$/, "_small $ 1"); – Carson

4

w wartości nominalnej nie ma powodu, aby użyć wyrażenia regularnego do tego. Tu są 2 różne metody, które wykorzystują funkcje zoptymalizowane do statycznej analizy składniowej strun:

Wariant 1:

$ext = "jquery.ui.min.css"; 
$ext = array_pop(explode('.',$ext)); 
echo $ext; 

Opcja 2:

$ext = "jquery.ui.min.css"; 
$ext = pathinfo($ext); 
echo $ext['extension']; 
+0

Funkcja pathinfo() wydaje się być najszybszą funkcją tego zadania. Regexp wziął 4.5, array_pop 4 i pathinfo() 3 względne jednostki czasu, aby wykonać zadanie. – valentinas

0

użyłem tego - spróbować :

m/\.([^.\\]+)$/ 
0

Oto, co potrzebne do wykluczyć ostatnią kropkę podczas dopasowywania tylko dla ostatniego „części”:

[^\.]([^.]*)$ 
Powiązane problemy