Autor Zpráva
Das
Profil *
Dobrý den, potřeboval bych poradit s regulárním výrazem, který bude rozpoznávat řetězce tvaru: mm, mm.Y, m.Y, mm.y a pod.
Mám tento:
(m|mm|M|y|Y){1,2}.+(m|mm|M|y|Y){0,2}
problém ale je, že mi projdou i tyto sekvence: mmm, mmy a pod.
Děkuji za radu
Fisir
Profil
Reaguji na Dase:
Tečka má v regulárních výrazech speciální význam – jakýkoliv jeden znak. Musíš ji tedy escapovat: \. Nope, blábol.
Keeehi
Profil
Pro ty 4, co jsi uvedl to je
m{1,2}(\.[yY])?
V překladu to říká: jedno nebo dvě malé m za kterým může ale nemusí následovat sekvence dvou znaků, tečky jako první a malé nebo velké y jako druhé.
Všechny možnosti tedy jsou: m, mm, m.y, m.Y, mm.y a mm.Y; Nic jiného neprojde. Pokud jsi měl tím podobně na mysli něco jiného, tak to musíš napsat.

Tohle vyhledává v textu písmenka m a y a ne reálné číselné datumy ale to doufám víš.
Das
Profil *
jedná se o regulární výraz pro rok a měsíc.
m...měsíc (jedno číslo)
mm..měsíc (dvě čísla)
M...měsíc slovně
y...rok (dvě čísla)
Y...rok (čtyři čísla)

chci aby byl buď první měsíc nebo rok v nějakém výše popsaném tvaru, potom jakýkoliv meziznak a potom může a nemusí být opět měsíc nebo rok.
Keeehi
Profil
((0?[1-9]|1[12]|leden|...|prosinec)([^\d\w]([12]\d)?\d{2})?)|((([12]\d)?\d{2})([^\d\w](0?[1-9]|1[12]|leden|...|prosinec))?)
Měsíce si dopiš a roky jsou omezeny na 1000-2999.
Das
Profil *
Já se omlouvám, asi jsem to špatně napsal nebo tys to špatně pochopil. skutečně v tom reguláru mají být pouze znaky m, mm, M, y a Y. zbytek, tedy převody mi řeší program.
tady je ukázka řetězců které mají projít:
m. Y
mm,y
y. M
mm , Y
Y m
m
y
naopak nesmí projít:
mmy, Y
yyyy

Zkrátka bude nejprve bud měsíc (m, mm, M) nebo rok (y, Y) potom libovolný minimálně jeden znak a potom může a nemusí být buď opět měsíc nebo rok.
Keeehi
Profil
((m{1,2}|M)(.[yY])?)|(([yY])(.(m{1,2}|M))?)
Vezme to ale ovšem i mmmy protože to označené m spadá do množiny jakýkoli znak. Pokud chceš použít jakýkoli znak mimo mMyY tak obě tečky nahraď [^mMyY], nebo pokud to má být cokoli jiného než písmeno pak se dá použít \W. Ovšem i pak projde mmm.y protože se to označené první m bude jednoduše ignorovat. Nejjednodušší pak je, pokud to je celý výraz. To se pak před celý regulární napíše ^ a na konec $. Pokud tam ale okolo může být i jiný text, tak si už musíš hrát s konci slov \b a nebo "nesmí předcházet" což je myslím ?!=.
Das
Profil *
Ok díky moc, zkusím si s tím poradit

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0