Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Java, prosím o opravení regexu.

Dobrý den, již dříve jsem zde dával téma s regexem, dneska se na vás obracím znovu, jelikož regex nejsem schopný pochopit, budu potřebovat vaší pomoc :)
Toto jsou následující patterny které potřebuji opravit.

	public Pattern					ipPattern			= Pattern.compile("([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])");
	public Pattern					webpattern			= Pattern.compile("(http://)|(https://)?(www)?\\S{2,}((\\.com)|(\\.net)|(\\.org)|(\\.co)|(\\.uk)|(\\.tk)|(\\.info)|(\\.es)|(\\.de)|(\\.arpa)|(\\.edu)|(\\.firm)|(\\.int)|(\\.mil)|(\\.mobi)|(\\.nato)|(\\.to)|(\\.fr)|(\\.ms)|(\\.vu)|(\\.eu)|(\\.nl)|(\\.us)|(\\.dk))|(\\.cz)|(\\.sk)|(\\.bis)");

Problém je v tom že to bere i například takovéhle zprávy,

xxxxx - pls nemozes od 18:00-20:00

Půjde tento pattern nějak vylepšit ?

Předmět Autor Datum
Kdyz chces neco opravit, uved taky priklad, co by to melo vybirat. Ten druhy vybira URL adresy, takz…
Jan Fiala 26.05.2013 18:24
Jan Fiala
Jsou tu 2 patterny, jedná se spíše o ipPattern. Má hlídat IP adresy př.: 95.90.299.120:26457 a né te…
siOnzeeSlav 26.05.2013 18:26
siOnzeeSlav
[.,:!\\-] znamena ze tam moze byt akykolvek z uvedenych znakov, takze . alebo , alebo : alebo ! aleb…
MM.. 26.05.2013 18:32
MM..
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0…
siOnzeeSlav 26.05.2013 18:39
siOnzeeSlav
Svata matko musis si najprv ujasnit CO chces mat ako match (ktore pripady). Od toho sa odvija jaky b…
MM.. 26.05.2013 19:11
MM..
Pokud to ma byt IP adresa, pak by to melo jit i jednoduseji: (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d…
Jan Fiala 26.05.2013 19:13
Jan Fiala
on to ma lepsie ptz testuje maximalne 255. Tvoj by bol match aj pri 999.999.999.999
MM.. 26.05.2013 19:16
MM..
Děkuji, toto můj případ vyřešilo. :) Zvláštní je že můj táta se jmenuje taky 'Jan Fiala', no nic pře… poslední
siOnzeeSlav 26.05.2013 19:16
siOnzeeSlav

[.,:!\\-]
znamena ze tam moze byt akykolvek z uvedenych znakov, takze . alebo , alebo : alebo ! alebo \ alebo -
Tazke logickcy ten tvoj vyraz bude generovat match aj ked tam napises 12:20-13:30
Ked chces aby bol match len vtedy ak tam je na tych konkretnych miestach vo vyraze . tak to [.,:!\\-] zmenis na .
Mas to vo vyraze na 3 miestach medzi vyrazmi pre cisla 0-255, takze tym vyrazom testujes len adresu t.j. cislo.cislo.cislo.cislo akonahle nastane nieco take tak mas match. Ale bez dvojbodky a portu za tym, to tam vo vyraze nemas.

"([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])"
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]([01]?\\d\\d?|2[0-4]\\d|25[0-5])[.,:!\\-]\\d"

Takže přídáním '[.,:!\\-]\\d' to vyřeším zdali to chápu dobře, vůbec mě to nenapadlo ::):x:

Svata matko musis si najprv ujasnit CO chces mat ako match (ktore pripady). Od toho sa odvija jaky bude regex. Ked chces mat match aj u zapisu sposobom 192-168-1-0 tak si tam nechaj ten - v tych hranatych zatvorkach apod, ked chces mat match len u zapisu s bodkami 192.168.1.0 tak jasne som ti napisal co mas zmenit na bodku.
pretoze ten tvoj regex bude robit match aj napr u zapisu 1-2-3-4, alebo u dalsich trilion moznych zapisov ktore nie su IP ale nejake datumy alebo vysledky zapasov alebo tipovacie moznosti u sportky alebo co :)

P.S> zabudol som ak chces pisat . mimo [] tak musis dat pred nu \

Pokud to ma byt IP adresa, pak by to melo jit i jednoduseji:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,4}|\d{1, 3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
vyraz obsahuje 2 pripady: IP s portem + IP bez portu
Dalo by se to napsat i se zpetnymi odkazy, ale takto je to citelnejsi

Děkuji, toto můj případ vyřešilo. :) Zvláštní je že můj táta se jmenuje taky 'Jan Fiala', no nic přeji hezký zbytek dne :)

No, zkoušel jsem to pouze přes online matcher.
v Java dostávám error:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ ) onChat.java

Upravil jsem váš regex na :

(\d{1,3})[.,:!\\-](\d{1,3})[.,:!\\-](\d{1,3})[.,:!\\-](\d{1,3})[.,:!\\-](\d{1,5})

Už to bude skoro to co potřebuji.

Tak jsem zjistil že \ se bere jako Escape character, tudiž jsem to nahradil za \\ a všechno funguje jak má.

Zpět do poradny Odpovědět na původní otázku Nahoru