wyrażenia regularne - ustawienie filtra na 'NIE'

0

witam.

mam problem z wyrażeniami regularnymi - za ich pomocą filtruję wyniki przeszukiwania folderów.
i tak, np chcąc znaleźć same pliki .mp3, użyję filtra
.
.mp3$
mp3 i ogg:
.*.(mp3|ogg)$

natomiast pojęcia nie mam, jak znaleźć wszystki pliki OPRÓCZ mp3

jedyne co wykombinowałem to
.*.[m][p][^3]$

ale to powoduje odrzucenie nie tylko mp3, ale i wszystkich plików z rozszerzeniem zaczynającm się na 'm' i 'mp' (np mpc, mpg etc)

help me :)

0

a tak: .*.[^(mp3)]$ ?

0

@SebaZ:
To powoduje że znakiem po kropce nie może myć (, m, p, 3, )

Z tego co wiem regexpy nie mają możliwości zaprzeczenia, można zrobić odwrotnie:
Sprawdzić czy plik ma rozszerzenie .mp3 (lub inne) i jak ma to odrzucić

0

Szkoda, ze nie napisales czy chodzi o .php skrypt czy tez o komendy w powloce.
Bo np. moglbys to zrobic tak: (kozysta z wyrazenia regularnego :P)

ls | awk '{ if ( $1 !~ "mp3$" ) {print $1} }'

co do preg_match to chetnie bym sie sam dowiedzial :)

0

Opracowałem takie wyrażenie, działa ale tylko jak rozszerzenie ma 3 znaki

^.*\.([^m][^p][^3]|m[^p][^3]|mp[^3]|[^m]p3|[^m][^p]3)$
0

chodzi o Delphi i komponent TPerlRegEx...
@prgtw: jak tylko dla 3 to odpada, no nie ? no...

Z tego co wiem regexpy nie mają możliwości zaprzeczenia, można zrobić odwrotnie:
Sprawdzić czy plik ma rozszerzenie .mp3 (lub inne) i jak ma to odrzucić

i tak zrobię, nazwę to wzniośle trybem positive/negative swith :D

//dzięki za utwierdzenie w niemożliwości :)

0

Wymodziłem coś takiego (za 'mp3' można podstawić dowolne rozszerzenie):

^(?:(?!.*\.mp3$).)*$
0

Bula faktycznie działa !!! dodam to sobie jako jeden z defaultowych filtrów, ale myślę że z przełącznika nie ma co rezygnować - na wypadek bardziej skomplikowanych filtrów 'negatywnych' wydaje się najlogiczniejszym rozwiązaniem i najprostszym dla użytkownika końcowego: o wiele łatwiej napisać 'pozytywny', poza tym jest dużo krótszy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1