Wyrazenia regularne

0

Witam mam maly problem z wyrazeniami regularnymi.
Chce napisac reprezentacje adresu ip oraz bramki.

Dla ip znalazlem gotowa reprezentacje:

"^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$"

ale moj netbeans pokazywal mi bledy przy "" (illegal escape character) wiec nie wiedzialem co zrobic ale kombinujac wymyslilem cos takiego:

"0[.]{1}([0-9]{1,3})[.]{1}([0-9]{1,3})[.]{1}([0-9]{1,3})$"

Nie wiem czemu ale ta wersja dziala. I tutaj pierwsze pytanie czy ta wersja bedzie dzialac czy musze cos poprawic?

Teraz musze napisac reprezentacje bramki ktora moze posiadac tylko wybrane liczby: 255,254,252, 248 itd w takiej postaci xxx.xxx.xxx.xxx dodatkowo musze zrobic bramki gdzie beda wymagane stale pola czyli np. pierwsze dwa pola maja byc stale np. 255.255. a reszta dowolna czyli od 255,254,252,248 itd. Moze ktos mi pomoc ? Pewnie jest gdzies gotowa reprezentacja ale nie wiem czy bedze mi chodzic. :/

0

Zamiast regexow bym zrobil inaczej:

  1. split stringa po .: String.split(".")
  2. sprawdzasz czy zwrocona tablice ma rozmiar 4, jesli ma to dalj, jesli nie to blad
  3. dla kazdego elementu tablicy parsujesz go na integere: Integer.parseInt(tab[i]) - wyjatek - blad, jesli ok to dalej
  4. masz 4 inty, teraz porownujesz je do czego chcesz
    Regexy nie sa do wszystkiego i czasami o wiele lepiej / latwiej (lub oba) mozna to zrobic "standardowymi" sposobami.

Zanim ktos mwytknie: wiem ze split dziala na regexach, jednak to wyrazenie nie jest takie skomplikowane.

0

Zgadzam się z przedmówcą, regexy są tu zbyteczne.
Ciąg

"([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$"
jest w Javie błędny, należy go zmienic na taki:
"
([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$"

0

Mozna i tak ale trzeba sobie podnosic poprzeczke bo na przyklad wyrazy dziele StringTokenizerem ale to pozniej i co prawda mozna go jeszcze troche zmodyfikowac by bledy zwracal w razie czego ale wydaje mi sie ze to troche przejscie obok.

Dzieki bogdans dodadnie dodatkowego slasha pomoglo.

A wiecie jak dac zeby np liczba "255.255" byla stalym ciagiem w regexie ?

0

"255\.255\.i tutaj regex dla 2 ostatnich octetow"

0

czaje dzieki
TO jeszcze ostatnia sprawa:

"^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$"

wstawilem na poczatku [^0] czyli zeby pierwszy znak nie byl zerem ale to odczytuje dodatkowo inne znaki tylko i wylacznie aby 1 pozycje zajmowal pierwszy sektor.

0

Dobra pokombinowalem ale dziala.. dzieki za pomoc :) forum super. szybka odpowiedz przy pilnej sprawie :D

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