Skocz do zawartości

Wyrażenia Regularne / Wzorce - słownik przekleństw, słowa zabronione


Rekomendowane odpowiedzi

[1] [trochę teorii] Jeżeli zainteresowałeś się tym tematem i to czytasz, to odpowiem stanowczo tak!!! Możesz w ten sposób zablokować reklamę serwera, słowa uznane za wulgarne lub to co według Ciebie uznane jest za niewłaściwe.

Czym są wyrażenia regularne? Za przykład niech posłużą przekleństwa, wulgaryzmy, ponieważ są jednym z powodów powstania tego poradnika. Wyrażenie Regularne to "grupa", [zbi(ór|ory) znak(Óó)w] (pasując(y|e)) dosłownie do porównywanego słowa. Słowa, wyrazy, liczby czy nawet emotikony są ciągiem, łańcuchem znaków (ang. string). W tych właśnie łańcuchach widoczne są znaki, które my sami (nasz mózg) potrafimy rozpoznać i zinterpretować jako słowa zakazane. Przykładowo pół słowo: kurw czy spier będzie miało dla nas konkretne znaczenie. Nie trzeba go kończyć czy odmieniać, żeby zrozumieć co dana osoba miała na myśli, chciała nam przekazać.  Ciąg znaków, w którym występuje znak [.] a po którym występują znaki pl, com to nic innego jak adres strony internetowej, serwera.

Przykładowe wzorce:

  • [A-Za-z]        - małe i wielkie litery bez polskich znaków diakrytycznych.
  • [A-Za-zĄą]  - małe i wielki litery uwzględniając znak Ą i ą.
  • [0-9]            - cyfry od 0 do 9.
  • \s                      - biały znak czyli znak spacji.
  • *                    - 0 lub więcej wystąpień.
  • \s*                    - 0 lub więcej wystąpień białego znaku.
  • +                       - 1 lub więcej wystąpień.
  • [A]+              - 1 lub więcej wystąpień znaku A.
  • [Aa]                 - 1 wystąpienie znaku: A lub a.
  • (e|o)              - 1 wystąpienie znaku e lub o
  • (e|o)+            - 1 lub więcej wystąpień znaków e lub o występujących przed kwantyfikatorem +
  • (Ee|Oo)+       - 1 lub więcej wystąpień znaków E,e lub O,o występujących przed kwantyfikatorem +
  • \&\w               - całkowita blokada formatowania tekstu na czacie


[2] [trochę praktyki] Jeżeli chcesz dowiedzieć się czegoś więcej lub zacząć pracować już teraz, polecam skorzystać z rad poniżej:

  1. Obszerniejszy materiał czym są wyrażenia regularne znajdziesz m.in na wikipedia.org lub w google wpisując odpowiednie hasła.
  2. Jak ich używać i gdzie znajdę przykłady? Polecam szukać w google pod hasłem "wyrażenia regularne java" i ustawić język na polski...
  3. Jak je budować? Polecam stronę:  https://regex101.com  Wszystko odbywa się w czasie rzeczywistym, więc mamy na bieżąco podgląd tego co próbujemy uzyskać.

Poniżej przykładowy wzorzec i ciągi znaków, które do tego wzorca pasują.

#REGULAR EXPRESSION
j(e|o)b

TEST STRING
ale z ciebie zjeb!, ty zajobie, jebnięty jestes?, zajebię ci!!!, zajebany cziter...

 

[3] [właściwa część tematu] Teraz kilka prostych, ale zadziwiająco skutecznych  przykładów wykorzystanych w Skript.

([Hh]\s*[U\s*u]+\s*[Jj])

Powyższy wzorzec może oznaczać:

  • słowo HUJ pisane na wiele sposobów uwzględniając: wielkość liter, ich wielokrotne powtórzenia i spacje.
  • początek wzorca:              [Hh] jedno wystąpienie litery H lub h.
  • początek środka wzorca:  \s* dowolna liczba spacji lub wcale.
  • koniec środka  wzorca:     [U\s*u]+ wielokrotne wystąpienie litery U lub u oddzielone spacją lub wcale.
  • koniec wzorca:                  [Jj] jedno wystąpienie litery J lub j.

          Efekt:   Hh   h Uu jJ

 

([Jj]\s*([E\s*e]+|[O\s*o]+)\s*[Bb])

Powyższy wzorzec może oznaczać:

  • słowo ZJEB lub ZAJOB pisane na wiele sposobów uwzględniając: wielkość liter, ich wielokrotne powtórzenia i spacje.
  • początek wzorca:              [Jj] jedno wystąpienie litery J lub j
  • początek środka wzorca:  \s* dowolna liczba spacji lub wcale
  • koniec środka  wzorca:     ([E\s*e]+|[O\s*o]+) wielokrotne wystąpienie litery E lub e oddzielone spacją lub wcale albo wielokrotne wystąpienie litery O lub o oddzielone spacją lub wcale
  • koniec wzorca:                  [Bb] jedno wystąpienie litery B lub b
Cytat

z a([Jj]\s*([E\s*e]+|[O\s*o]+)\s*[Bb])

Czat:   Zzzz aJ oB lub zZZ j Eb

 

 

(aternos|[Ss])\s*(\.|kropka|)\s*[Mm]\s*[Ee]

Powyższy wzorzec może oznaczać:

  • aternos.me pisane na wiele sposobów tj:  aternos.me, nazwaserwera aternos ME, aternos kropka Me itd.
  • początek wzorca:  (aternos|[Ss])\s* ciąg, łańcuch znaków (string) czyli aternos po którym występuje znak spacji lub wcale lub znak S,s po którym występuje znak spacji lub wcale
  • środek  wzorca:     (\.|kropka|) znak (.) lub ciąg, łańcuch znaków "kropka"
  • koniec wzorca:       \s*[Mm]\s*[Ee] znak spacji lub wcale po którym występuje litera M lub m, znak spacji lub wcale  i litera E lub e

          Efekt:   aternosme.me, aternos kropka me, aternos. mE czy MojSerwer s.me

 

Skrypt

on chat:

	if message partially matches "([Jj]\s*([E\s*e]+|[O\s*o]+)\s*[Bb])":
		cancel event
		set {_message} to message
		send "" to player
		send " &cSPAM:  &f%{_message}%" to player
		send "" to player
		
	if message partially matches "([Kk]\s*[U\s*u]+\s*[R\s*r]+\s*[Ww])":
		cancel event
		set {_message} to message
		send "" to player
		send " &cSPAM:  &f%{_message}%" to player
		send "" to player
		
	if message partially matches "([Hh]\s*[U\s*u]+\s*[Jj])":
		cancel event
		set {_message} to message
		send "" to player
		send " &cSPAM:  &f%{_message}%" to player
		send "" to player
		
	if message partially matches "(aternos|[Ss])\s*(\.|kropka|)\s*[Mm]\s*[Ee]":
		cancel event
		kick player due to "Powód:  REKLAMA!%nl%      Od:       Administracja"
		ban player due to "REKLAMA!" for 60 seconds #minutes

Możemy w ten sposób zablokować każdy...dosłownie każdy wzorzec. Niestety czym bardziej jest on skomplikowany tym większe obciążenie dla silnika wzorców a co za tym idzie, obciążenie serwera. Ale to już pozostawiam każdemu do samodzielnego testowania ;)
Ddwnload

Edytowane przez luk4sMC
Odnośnik do komentarza
https://skript.pl/temat/44757-wyra%C5%BCenia-regularne-wzorce-s%C5%82ownik-przekle%C5%84stw-s%C5%82owa-zabronione/
Udostępnij na innych stronach

  • luk4sMC zmienił(a) tytuł na Wyrażenia Regularne / Wzorce - słownik przekleństw, słowa zabronione

Cóż, szczerze nie nazwałbym tego poradnikiem, a listą przykładów z wyjaśnieniami co dany regex robi.

Na początku poradnika dałeś informację, że na grubszą metę osoba korzystająca z tego poradnika ma sobie sama poszukać informacji. Owszem, jestem również fanem usamodzielniania ludzi, ale nie uważasz, że to lekka przesada? Ktoś tutaj przyjdzie z nadzieją, że otrzyma zastrzyk wiedzy, a się rozczaruje, bo autor wysyła go na samodzielne poszukiwania. W końcu to jest poradnik, ludzie tutaj będą oczekiwali od ciebie dokładnego wytłumaczenia wszystkiego krok po kroku, a nie odsyłania w odmęty internetu.

W obecnej formie cały poradnik już prędzej nadaje się do sekcji "Skript > Skrypty", gdyż sam skrypt zajmuje większą część poradnika.

Powinieneś również unikać wyciągania fragmentów kodu i komend z kapelusza. Mam tutaj chociażby na myśli wykonywanie komendy /sendmsg.

Mimo wszystko doceniam każdą pracę, w którą ktoś włożył choć trochę starań i wysiłku. Dlatego też otrzymujesz ode mnie repkę :>

EDIT:

Dobrze byłoby również podać w przystępny sposób różnicę między "partial" i "full" regexem.

Edytowane przez Kormic

Kormic, nie wydaje mi się, że tworzenie koła na nowo ma jakikolwiek sens! Na wikipedii jest wystarczająco obszerny materiał, ale nie tylko tam znajdziesz ciekawe informacje. Wpisanie słów "wyrażenia regularne java" zwraca tak obszerny materiał, że każdemu wystarczy. Wzorce mogą się różnic nieznacznie a ja nie tylko w Skript siedzę, więc stąd m.in ten poradnik.

  • Zrobiłem to przede wszystkim dlatego, że przyzwyczajony do uniksowych programów: sed, grep itd, inaczej korzystałem ze wzorców co mnie zgubiło i zmarnowałem dużo godzin. W zasadzie to ja nie lubiłem tych potworków, a wolałem przetwarzanie danych na niskim poziomie 😆
  • Zrobiłem to bo szukałem w google pod hasłem regex skript i nieniewiele tego jest, a to co jest czyt. u mnie nie działa.
  • W rzeczywistości nie zależny mi na jakichkolwiek pochwałach czy statusie tutaj ;)
  • Napisałem to na kolanie i nie uważam, żebym się napracował.
  • Zrobiłem to bo się nudziłem
  • Zrobiłem to, ponieważ kogoś to zainteresuje i zbudujemy razem słownik.
  • Zanim to napisałem przeszukałem w google czy taki temat pojawił się na tym forum. Nie pojawił sie! Za to pojawiły sie kolejne skrypty pod którymi ktoś pisał "a zrób tak, żeby blokowało k u r * Aa

 

Cytat

Na początku poradnika dałeś informację, że na grubszą metę osoba korzystająca z tego poradnika ma sobie sama poszukać informacji. Owszem, jestem również fanem usamodzielniania ludzi, ale nie uważasz, że to lekka przesada? Ktoś tutaj przyjdzie z nadzieją, że otrzyma zastrzyk wiedzy, a się rozczaruje, bo autor wysyła go na samodzielne poszukiwania. W końcu to jest poradnik, ludzie tutaj będą oczekiwali od ciebie dokładnego wytłumaczenia wszystkiego krok po kroku, a nie odsyłania w odmęty internetu.

Przecież to jest u standaryzowane, więc co ja mogę więcej? Uruchomienie skryptu i wpisanie przekleństw bliskoznacznych ze słowem kurwa wyjaśni każdemu wszystko.

Powyższy wzorzec może oznaczać: <- Przecież to jest wyjaśnienie!

  • słowo *UJ pisane na wiele sposobów uwzględniając wielkość liter, ich wielokrotne powtórzenia i spacje.
  • [Hh] jedno wystąpienie litery H lub h
  • \s* dowolna liczba spacji lub wcale
  • [U\s*u]+ wielokrotne wystąpienie litery U lub u oddzielone spacją lub wcale
  • [Jj] jedno wystąpienie litery J lub j
     

 

Cytat

Powinieneś również unikać wyciągania fragmentów kodu i komend z kapelusza. Mam tutaj chociażby na myśli wykonywanie komendy /sendmsg.

A co się takiego złego stanie? Wyrzuci w linuksowym terminalu lub webowej konsoli błąd. W grze admin nawet tego nie zauważy. Nawet skrypt nie wyrzuci błędu...

Edytowane przez luk4sMC
11 minut temu, luk4sMC napisał:

Kormic, nie wydaje mi się, że tworzenie koła na nowo ma jakikolwiek sens! Na wikipedii jest wystarczająco obszerny materiał, ale nie tylko tam znajdziesz ciekawe informacje. Wpisanie słów "wyrażenia regularne java" zwraca tak obszerny materiał, że każdemu wystarczy. Wzorce mogą się różnic nieznacznie a ja nie tylko w Skript siedzę, więc stąd m.in ten poradnik.

Chciałem jedynie powiedzieć, że w tej formie to nie jest poradnik, a skrypt z opisanymi regexami.

14 minut temu, luk4sMC napisał:

Zrobiłem to przede wszystkim dlatego, że przyzwyczajony do uniksowych programów: sed, grep itd, inaczej korzystałem ze wzorców co mnie zgubiło i zmarnowałem dużo godzin. W zasadzie to ja nie lubiłem tych potworków, a wolałem przetwarzanie danych na niskim poziomie 😆

Nie wiem, nie korzystałem z regexów w grepie. Mimo wszystko widzę, że zwykły regex jest znacznie lepszy niż regex w nim (w grepie).

16 minut temu, luk4sMC napisał:

Zrobiłem to bo szukałem w google pod hasłem regex skript i nieniewiele tego jest, a to co jest czyt. u mnie nie działa.

Dlatego mało znalazłeś, gdyż Skript korzysta z tych samych regexów, co Java. Szukanie tego w kategorii Skripta jest daremne.

17 minut temu, luk4sMC napisał:

W rzeczywistości nie zależny mi na jakichkolwiek pochwałach czy statusie tutaj ;)

To dobrze, to dobrze. Nie wiem dlaczego nagle tak z tym wyskoczyłeś.

20 minut temu, luk4sMC napisał:

Napisałem to na kolanie i nie uważam, żebym się napracował.

Napisanie kodu i opisanie szczegółowo możliwości danego regexa nie należy do najprostszych czynności, dlatego też twierdzę, że się napracowałeś.

21 minut temu, luk4sMC napisał:

Zrobiłem to bo się nudziłem

Cóż, moje skrypty w większości również powstały z nudów. To nie jest nic dziwnego, każdy choć raz pisał coś tylko po to, aby pisać.

22 minuty temu, luk4sMC napisał:

Zrobiłem to, ponieważ kogoś to zainteresuje i zbudujemy razem słownik.

Wiem o tym. Wspomniałem o tym w pierwszym poście i dodałem, że osoba poszukująca wiedzy może być rozczarowana twoim poradnikiem.

23 minuty temu, luk4sMC napisał:

Zanim to napisałem przeszukałem w google czy taki temat pojawił się na tym forum. Nie pojawił sie! Za to pojawiły sie kolejne skrypty pod którymi ktoś pisał "a zrób tak, żeby blokowało k u r * Aa

Cóż, regex został wprowadzony dopiero w wersji 2.5.2, więc nie można się spodziewać zbyt wielu związanych z nim wątków na forum (i w ogóle w internecie).

Dobrze, że jakiś konsensus miedzy nami jest ;) Zrobię tak, ze dodam poniżej poradnik dla kogoś kto chciałby zgłębić temat bardziej. Ważne, że jest działający program, który zwróci to co ma zwrócić, a osoba zainteresowana będzie miał bazę do dalszej pracy...

Edytowane przez luk4sMC
  • 2 tygodnie później...

Ja kudłaty, durnowaty, nie wiedziałem... jak czytać z pliku!!! 🤦‍♂️ Ale, że się naumiałem, to wprowadziłem kilka zmian!

fIY5mv.jpg

Update: 3.02.2021:

  • słowa powszechnie uznawana za wulgarne można dodawać w pliku
  • nazwy domen, serwerów można dodawać w pliku.

Skrypt

on chat:

	loop yaml list "RegEx[curses]" from file "plugins/Skript/scripts/regexlist.yml":
	
		set {_curses::*} to "%loop-value%"
		if message partially matches "%{_curses::*}%":
			cancel event
			set {_message} to message
			send "" to player
			send " &cSPAM:  &f%{_message}%" to player
			send "" to player
			
	loop yaml list "RegEx[spam]" from file "plugins/Skript/scripts/regexlist.yml":
	
		set {_spam::*} to "%loop-value%"
		if message partially matches "%{_spam::*}%":
			cancel event
			kick player due to "Powód:  REKLAMA!%nl%      Od:       Administracja"
			ban player due to "REKLAMA!" for 5 seconds

Plik *.yml

Cytat

RegEx[curses]:
#Wzorzec słowa: pizd*
- '([Pp]\s*[I\s*i]+\s*[Z\s*z]+\s*[Dd])'
#Wzorzec dla słowa: hu*
- '([Hh]\s*[U\s*u]+\s*[Jj])'
#Wzorzec dla słowa: kur*
- '([Kk]\s*[U\s*u]+\s*[R\s*r]+\s*[Ww])'
#Wzorzec dla słowa: debil
- '([Dd]\s*[E\s*e]+\s*[B\s*b]+\s*[Ii])'
#Wzorzec dla słowa: jeb*
- '([Jj]+\s*([E\s*e]+|[O\s*o]+)\s*[Bb]([Nn]|[Aa]|[Ii]))'
#Wzorzec dla słowa: zje*
- '((z|za|po)+[Jj]+\s*([E\s*e]+|[O\s*o]+)\s*[Bb])'

RegEx[spam]:
#Wzorzec reklamy: aternos.me
- '([Aa]\s*[Tt]\s*[Ee]\s*[Rr])'
- '(aternos|[Ss])\s*(\.|kropka|\s*)\s*[Mm]\s*[Ee]'

Download  #dla leniwych.

Edytowane przez luk4sMC

Dobry postęp, ale nadal jedna rzecz mi się nie podoba.

set {_spam::*} to "%loop-value%"
if message partially matches "%{_spam::*}%":

Zamiast tego wystarczy jedynie użyć loop-value w warunku.

Właśnie dokładnie tak miało to wyglądać! 😆 Był powód, ale mniejsza o to

Obecnie się męczę z:

RegEx[mcformat]:
#Wzorzec znaków: &c, &6, §4
#- '[a-fk-o0-9]'
#problem ze znakiem §

Koniecznie wymagany jest znak §, który po zamknięciu programu zamienia się w losowe znaki od kwadratów po losowe napisy np. LAT itd.
 

if message partially matches "(§%loop-value%)":

Czary mary, problem zniknął, ale wcześniej też więc ;)

on chat:

	loop yaml list "RegEx[mcformat]" from file "plugins/Skript/scripts/regexlist.yml":
	
		if message partially matches "(§%loop-value%)":
			cancel event
Cytat

RegEx[mcformat]:
#Wzorzec znaków: &c, &6, §4
- '[a-fk-o0-9]'

 

Edytowane przez luk4sMC

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...