Regex w Stringu

Regex w Stringu
BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

Cześć,
mam taki problem mam jakiś tekst np. "Due to too many attempts to log in, the account has been suspended for 15 minute(s).". Chciałbym go porównać z innym tekstem, identycznym z taką różnicą, że czas może być różny. Zamiast 15 może być np. 5.
Czyli chciałbym mieć stringa jak wyżej tylko, żeby liczba minut dopasowywała się do tej z pobranego innego stringa.
Jak skonstruować takiego stringa?
Jest jakoś możliwość, żeby w miejsce liczby podać jakiegoś wildcard? Próbowałem z \d{1}, ale coś chyba, źle rozumiem jak to działa :(

PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 miesiące
  • Postów:2787
0

\d{1} sprawdza czy jest dokładnie jedna cyfra. spróbuj \d+

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około godziny
  • Postów:4935
1

Zalezy ilu cyfrowa ma być ta liczba minut:
\d - dokładnie jedna cyfra;
\d+ - jedna lub więcej cyfra;
\d{<tu liczba ile dokładnie ma być cyfr>} ;
\d\d? - jedna lub dwie cyfry, tu juz mozna kombinować: d\d?\d? - od jednej do trzech cyfr, itd...


BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

Mhm, tylko jak porównać te stringi czy jeden jest równy drugiemu? Obecnie mam coś takiego:

Kopiuj
stringPattern.contains(string)

Gdzie ten pierwszy to ""Due to too many attempts to log in, the account has been suspended for \d+ minute(s).",
a drugi "Due to too many attempts to log in, the account has been suspended for 15 minute(s)."

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

\d\d? - jedna lub dwie cyfry, tu juz mozna kombinować: d\d?\d? - od jednej do trzech cyfr, itd...

A nie 0 lub 1?


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
Zobacz pozostały 1 komentarz
lion137
Ten regex pasuje do znaku: jednacyfra i zaraz po niej zero lub jedna cyfra. Czyli "?" odnosi się do drugiego "\d", czyli do drugiej cyferki, i ta druga cyferka jest właśnie drugim członem, uff...:)
PI
@lion137: jeśli odpowiadałeś do mnie, to sorki, ale wiem to, po prostu zamiast czyli napisałem czy XDD
S9
A racja, nie doczytałem :P xD
PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 miesiące
  • Postów:2787
0

No nie no, tak to nie. Obczaj klasy Pattern, Matcher

BA
Tak właśnie myślałem, chciałem jakoś na skróty :p
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około godziny
  • Postów:4935
0
barslo napisał(a):

Mhm, tylko jak porównać te stringi czy jeden jest równy drugiemu? Obecnie mam coś takiego:

Kopiuj
stringPattern.contains(string)

Gdzie ten pierwszy to ""Due to too many attempts to log in, the account has been suspended for \d+ minute(s).",
a drugi "Due to too many attempts to log in, the account has been suspended for 15 minute(s)."

https://docs.oracle.com/javase/tutorial/essential/regex/test_harness.html


BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

No dobra doszedłem do czegoś takiego:

Kopiuj
Pattern p = Pattern.compile("Due to too many attempts to log in, the account has been suspended for \\d+ minute(s).");
Matcher m = p.matcher("Due to too many attempts to log in, the account has been suspended for 1 minute(s).");
m.matches();

Jednak zwracam mi fail.
Intellij podpowiada mi coś jak by z tymi nawiasami było coś nie tak.
screenshot-20171031133640.png

PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 miesiące
  • Postów:2787
1

nawiasy i kropka powinny być poprzedzone backslashem - w patternie jedynie ofc

edytowany 1x, ostatnio: Pinek

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.