![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Czy jest możliwe zanegowanie całych słów w wyrażeniu regularnym?
Chcę napisać wyrażenie regularne, które zaakceptuje wszystkie inne słowa poza np. foo, bar Przykładowe wyniki "testu" wyrażenia widok - ok foo - nie ok bar - nie ok foobar - ok mieso - ok itd... -------------------- |
|
|
![]()
Post
#2
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Wynik dla: 'Grumman F-14 Tomcat (ang. Kocur) ? amerykański naddźwiękowy, myśliwiec pokładowy Marynarki Wojennej Stanów Zjednoczonych o zmiennej geometrii skrzydeł zaprojektowany przez wytwórnię Grumman.' : błąd Wynik dla: 'Grumman F-14 Tomcat (ang. Kocur) ? amerykański naddźwiękowy, myśliwiec pokładowy Marynarki Wojennej Stanów Zjednoczonych' : ok Wynik dla: 'Grumman F-14 Tomcat (ang. Kocur) ? amerykański naddźwiękowy': ok Wynik dla: 'myśliwiec pokładowy Marynarki Wojennej Stanów Zjednoczonych o zmiennej geometrii ' : błąd.
Powód edycji: [blooregard]:
-------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
No i właśnie o to mi chodzi, że negacja powinno negować wyrażenie w poniżej opisany sposób.
Przykładowo wyrażenie Powinno zwrócic prawdę. Dlaczego? "Szukaj ciągu NIE test lub NIE hehe" a lol takimi słowami nie jest. Może źle rozumiem negację ale wyjaśnię po co mi coś takiego. Tworzę na swojego potrzeby klasę do menu gdzie dla każdego elementu wstawić ustawienie kiedy element jest aktywny (jaki moduł, kontroler, akcja) i zrealizowałem to w ten sposób że dane ustawienie jest częścią wyrażenia regularnego. Np Kod kontroler = user|photos Dopasuje kontroler user i photos. Natomiast teraz chciałbym dodać warunek, że element ma być aktywny dla wszystkich akcji POZA tymi, które ustalę np list|edit, dlatego zastanawiam się jak to zapisać w wyrażeniu regularnym. Oczywiście ostatecznością w tym przypadku byłoby skorzystania z takiego wyrażenia "list|edit" i dodatkowo dodanie oddzielnej flagi zanegowania. Wyglądałoby to tak Kod action=list|edit
action_negate=true Ten post edytował wookieb 22.04.2010, 19:14:55 -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Z teorii automatów: jeśli automat skończony (tj. wyrażenie regularne) akceptuje język X, to aby akceptować dopełnienie języka X, wystarczy zamienić miejscami stany akceptujące i odrzucające (czyli krótko mówiąc: zanegować). Ponadto poczytaj sobie o znaczeniu symbolu ^ w wyrażeniach regularnych Perla, gdyż nie działa on tak, jak myślisz. Jako negacja funkcjonuje wyłącznie w klasie znaków, tj. w nawiasach kwadratowych, a wszędzie indziej reprezentuje początek badanego słowa. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Czyli tak jak myślałem - nie da się. Bez flagi się nie obejdzie, ale dzięki za pomoc
![]() -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 30.04.2025 - 04:38 |