Drobna analiza wyrażenia regularnego, umieszczonego w w/w temacie:
([0-9].*[qwertyuiopasdfghjklzxcvbnm`,./;'-= ].*[0-9].*[qwertyuiopasdfghjklzxcvbnm`,./;'-= ].*[0-9].*[qwertyuiopasdfghjklzxcvbnm`,./;'-= ].*[0-9])
Widać, że tworzył go ktoś kto nie zna się na wyrażeniach regularnych, bo po 1. można go zapisać prościej:
([0-9].*[a-z`,./;'-= ].*[0-9].*[a-z`,./;'-= ].*[0-9].*[a-z`,./;'-= ].*[0-9].*[a-z`,./;'-= ].*[0-9])
a dwa: mały przykład tego, co ten regex złapie:
12 groszy za 3 modele w wersji 2 wiec naprawdę sie oplaca 1!!!
Dlaczego? bo łapie:
dowolną cyfrę, po niej dowolny ciąg znaków, po niej znak z dość szerokiej grupy, następnie znów dowolny ciąg znaków, znów cyfrę... i tak 4 razy (znaczy do złapania 4 cyr). Jaki to ma sens? kto umieszcza IP w ten sposób?
A czego nie złapie?
5X12X23X1
Co już może być zinterpretowane jako adres IP.
Sens ma łapanie: ciągu cyfr (max do 3ch, adres IP nie może posiadać więcej w 1 segmencie)) poprzedzonego max 3 dowolnymi znakami (po wpisaniu większej ilości znaków nie wygląda to już jak adres IP) i tak 4 razy, gdzie po ostatniej cyfrze już nie łapiemy dowolnych 3ch znaków.
Regex:
[0-9][0-9]?[0-9]?..?.?[0-9][0-9]?[0-9]?..?.?[0-9][0-9]?[0-9]?..?.?[0-9][0-9]?[0-9]?
(zapisane bez użycia notacji {1,3} bo nie wiem, czy amxx to obsługuje)
Tutaj już się trzeba natrudzić, żeby znaleźć normalnie wyglądającą wypowiedź, która zostanie wyłapana. I nie znalazłem niczego, co by wyglądało jak adres IP chociaż troszkę, a by nie było łapane.
GwynBleidD (09.08.2015 11:32):
Dodatkowo fakt: Twój regex wykonuje aż 181 porównań żeby sprawdzić ciąg znaków, mój wykonuje 48, czyli znacznie mniej. Po użyciu:
[0-9]{1,3}.{1,3}[0-9]{1,3}.{1,3}[0-9]{1,3}.{1,3}[0-9]
mamy tylko 19 porównań, prawie 10 razy mniej! Ale tego regexa może
amxx nie obsłużyć, proszę sprawdzić przed użyciem.