Wyrażenie regularne

0

Witam

Jak zbudować wyrażenie regularne, aby spełniało warunek:
zdanie nie może się kończyć na żadne z "er", "em", "aut, "ewe"

Pisałem tak: ^[(er|em|aut|ewe)]$
...ale niestety nie działa

Wiem, że "|" to alternatywa i chyba nie jest to tutaj odpowiedznie.
Ale sam już nie wiem co i jak tu użyć aby dało się wybrać zdania, które nie kończą się w sposób, który podałem. bardzo proszę o pomoc lub podpowiedź.

Pozdrawiam

0

A po co tam używasz [] to ja nie wiem... Dałeś tez na początek ^, ale nie dopasowujesz żadnych znaków oprócz tych, które nie mogą być dopasowane. Czyli pominąłeś zupełnie znaki, które mają poprzedzać tę końcówkę.

Mogę Ci pomóc na sucho, bo C# pod ręką nie mam. IIRC .NET obsługuje to, co chcę użyć (z angielskiego nazywa się to "negative lookbehind").:

^.*(?<!er|em|aut|ewe)$

Da się też inaczej -- bez tych troszkę bardziej zaawansowanych funkcji (np. JavaScript nie wspiera lookbehindów) -- ale w mało przejrzysty sposób. Skoro możesz, to użyj tego.

Wyrażenia regularne to BARDZO przydatna rzecz. Fajne jest to, że są dostępne w ten czy inny sposób w niemal każdym języku programowania. Więc jak je opanujesz, to przyda Ci się to nawet za 10 lat, gdy będziesz pisał w czymś innym niż C#. Polecam to bardzo dobre źródło na temat wyrażeń regularnych: http://www.regular-expressions.info/

0

Witam ponownie

Dziękuję Ci bswierczynski za pomoc i poświęcony czas.
Bardzo mi pomogłeś.

Rzeczywiście te wyrażenia to strasznie ciekawa sprawa i chyba nadszedł czas, żeby je dobrze opanować.
Zawsze z tym zwlekałem, ale teraz są mi potrzebne, więc dobra okazja aby się ich nauczyć :)

Pozdrawiam Cię i jeszcze raz dziekuję!

0

Proszę bardzo. Tbh jestem zaskoczony, że od razu zadziałało. Przetestowałbym to w JavaScripcie, ale on niestety obsługuje tylko lookaheady (a nie użyte przeze mnie lookbehindy).

Ja też na studiach, jak mieliśmy bodaj języki formalne i kompilatory, nie przepadałem za wyrażeniami regularnymi. Ale wielu moich kumpli po prostu ich nie cierpiało. Pytali, na cholerę nam to...

Ale okazuje się, że teraz używam ich dosłownie w każdym większym projekcie. Jest parsowanie stringów -- są wyrażenia regularne. Pewnie Ty też czasem to robisz ręcznie, tj. przetwarzasz stringi znak po znaku, w pętli, żeby wyłuskać jakieś dane. Z regexami -- NO MORE!

Ja robię głównie w branży webowej. Po stronie serwera, wyrażenia regularne służą do walidacji danych. I do tworzenia "ładnych URL-i". Po stronie klienta (JavaScript mimo paru braków fajnie je wspiera) też pomagają przy walidacji danych, ale również przy np. sprawdzeniu, czy jakiś element ma daną klasę CSS-ową. Czyli praktycznie można albo używać ich wygodnie na każdym poziomie, albo pisać iteracje przeglądające stringi znak po znaku...

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