Molim da mi netko pomogne napisati RegEx

Ne znam dal spada RegEx u ovaj podforum, al eto ja ga koristim u javascriptu, pa sam ovdje smjestio temu… Nadam se da nije problem…
Za početak imam dva jednostavna pitanja:
Koji RegEx izraz bi pokrivao sljedeće:

  1. Sadrži 6 alfa numeričkih znakova od kojih je barem jedno veliko slovo i barem jedno je broj
  2. Prvi znak je $ a nakon njega slijedi minimalno 4 brojčanih znakova

Eto, molim pomoć :slight_smile:

  1. \$\d{4,}

Hvala, to je to!
Jel mi možeš pomoći i prvi, ja sam to ovako zamišljao al mi ne radi:
[a-zA-Z0-9]{6,}\u+\d+

Pod broj 1 možeš rješiti sa tri if petlje, mislim da je to komplicianje bez razloga trpanje u jedan regex.
Možeš razlomiti i na dva regex i string lenght.

Ups, ipak nije to to :frowning: po ovom znak $ može biti bilo gdje, meni je bitno da je na prvom mjestu…
Probao sam stavljat znak probao sam i ovo ^$\d{4,} i ovo ^$\d{4,} al onda mi ništa ne prolazi…

@trokut
^$\d{4,}$ probaj ovako - ovo MORA raditi. Ako ti je praktičnije, provjeri si na myregexp.com

U vezi drugog zadatka, moraš ispitati puno kombinacija i sigurno je da će ti rješenje biti kobasica od regularnog izraza.

Ad zad. 2. Regularnim izrazima nije moguće brojati. Pošto imaš konačnu duljinu stringa, bilo bi teorijski moguće ispitati sve kombinacije za točno jedan, točno dva, …, točno 6. Praktički nemoguće. Da je duljina stringa barem 6, onda bi bilo i teoretski nemoguće to ispitati regularnim izrazom.

@tsereg
Itekako je moguće :slight_smile: Imao sam kolegij na faksu koji se zove “Regularni izrazi” gdje smo pisali upravo takve kobasice.

Za neodređenu duljinu bi bilo nešto oblika:

[a-z]([A-Z][a-zA-Z][0-9][a-zA-Z0-9]|[0-9][a-z0-9][A-Z][a-zA-Z0-9]*)

Za određenu je prekomplicirano.

Za juniora: napiši regularni izraz koji prepoznaje riječi koje imaju isti broj otvorenih i zatvorenih zagrada.

@tsereg
Da li ovo trebam shvatiti kao provokaciju? :slight_smile:

Afkors. To se u Dalmaciji zove “pripetavanje”.

Kako regexom omogućiti razmak tj. želim izraz koji ima minimalno 6 brojeva, ali smije biti razmak među njima?

Pod pretpostavkom da si mislio minimalno 6 brojki, a ne brojeva:
([0-9]\s*){6}([0-9]\s*)*
Dopušta razmake i iza zadnje brojke, tj. eventualni razmaci iza posljednje brojke u nizu će biti uključeni u “match” pa će trebati napraviti trim. Može se riješiti da ne budu uključeni, ali bi ispala malo kobasica.

Ovaj kod će vratiti sve brojke i razmake (ukupne duljine od 6 znakova). Ako razmak ne smije biti na prvom ili zadnjem mjestu reci...

Ako se razmaci ne smiju računati u ukupnu duljinu od 6 znakova, a ne smiju biti na prvim mjestima, onda će sigurno ispasti kobasica kao što je tsereg rekao.

Ovaj kod će vratiti sve brojke i razmake (ukupne duljine od 6 znakova). Ako razmak ne smije biti na prvom ili zadnjem mjestu reci…

Ako se razmaci ne smiju računati u ukupnu duljinu od 6 znakova, a ne smiju biti na prvim mjestima, onda će sigurno ispasti kobasica kao što je tsereg rekao.

[quote=“tsereg”]Pod pretpostavkom da si mislio minimalno 6 brojki, a ne brojeva:
([0-9]\s*){6}([0-9]\s*)*
Dopušta razmake i iza zadnje brojke, tj. eventualni razmaci iza posljednje brojke u nizu će biti uključeni u “match” pa će trebati napraviti trim. Može se riješiti da ne budu uključeni, ali bi ispala malo kobasica.[/quote]

Ili skraćeno isto to što si ti napisao:

HTML{6,}[/HTML]

Nedostatak ovog izraza, osim što razmak može biti na kraju, je taj što je razmak obavezan, a u zadatku stoji da razmak SMIJE biti između brojeva…

[HTML][0-9][0-9\s]{4,}[0-9][/HTML]

Ovaj izraz će isključiti razmake na početku i kraju. Problem će biti jedino ako se razmaci ne smiju brojati. Tj, sada će match biti npr. “123 56”

[quote=“junior”]Nedostatak ovog izraza, osim što razmak može biti na kraju, je taj što je razmak obavezan[/quote]Razmak nije obvezan u izrazu koji sam napisao. U izrazu koji si ti napisao je obavezan upravo jedan razmak iza druge do pete brojke.

Zvjezdica (*) ili Kleenov operator znači “nula ili više”. Plus (+) znači jedan ili više.

Dakle, a* = a+?

Mislim da trebaš dopustiti niti jedan, jedan ili više razmaka između brojeva.

Sorry, previdio sam to…
Dakle, konačno rješenje bi bilo:

[HTML]0-9{4,}[0-9][/HTML]

Ili u slučaju da se smije pojaviti samo jedan razmak između:

[HTML]0-9{4,}[0-9][/HTML]

?

Da, zgodno je što mora biti barem 6 brojki. Što bi bilo da mora biti tek jedna?

U drugom dijelu dopuštaš do dva razmaka između. Pogodi zašto. Onda shodno tome korigiraj i prvi izraz, jer on funkcionira samo zato što se dopušta da između brojki ne bude niti jedan razmak. Da se traži da bude najmanje jedan razmak, imao bi isti problem kao i drugi izraz.

:slight_smile:

Nisu trivijalni ti regularni izrazi, ha?

Vjerujem da si ovo napisao prije nego si vidio da sam ispravio izraz? :slight_smile:

Daleko od toga da su regularni izrazi trivijalni :slight_smile: Ovi možda i jesu do neke mjere. Na ispitu iz kolegija koji sam gore spomenuo izraz je bio jako dugačak (cca pola a4 stranice).

Meni je ovo jako zanimljivo područje :slight_smile:

Vidim sada da si ispravio izraz. Sada u obadva rješenja ne smije postojati niti jedan razmak između prve i druge brojke.

Zašto jednostavno ne ukloniš početni [0-9]. Pošto imaš fiksirano da mora biti [0-9] na kraju, a regularni izrazi se definiraju da pogađaju najdulji leksem, ukoliko ih ima više koji zadovoljavaju, to bi trebalo raditi što se traži.

Naravno, 4 nužna treba promijeniti u 5, tj. početni znak ubaciti u zagradu.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja