Autor Zpráva
Klicpera
Profil *
Dobrý večer, nevím si rady s jedním regulárním výrazem.

Potřebuji funkcí preg_match vybírat z textu první výskyt čtyřznaké kombinace tohoto typu:


" a1 "
" A1 "
" 1a "
" 1A "



" a5 "
" A5 "
" 5a "
" 5A "


Jinak řečeno: a1 až a5, též A1-A5 a též i obráceně 1a-5a a 5A-5a (zleva i zprava musí být mezera ( \s{1} )


Nepřípustná je naopak kombinace " AA ", " aA ", " Aa ".
Děkuji.


*a též je nepřípustná i kombinace čistě číselná " 11 ", " 12 " apod.
Tori
Profil
Nejdřív si složte regulár pro všechny kombinace včetně nepovolených. Pak přidejte aserci (negative lookbehind assertion), kterou vyloučíte nepovolené kombinace.
Klicpera
Profil *
Děkuji, ale tu aserci vůbec nechápu, částečný regulár pro všechny kombinace je následující:

'/[\s][aA12345]{2}[\s]/'

a nepovolené jsou tyto:

[aA]{2} 
[12345]{2} 



Tak jsem "hraním" pokus/omyl došel k tomuto:

'/ [1-5aA]{2} (?<! [1-5]{2} | [aA]{2} )/'

Myslíte že to mám správně?

Když jsem to testoval s preg_match tak se to po pár pokusech jeví jako vyhovující, ale byl bych rád kdyby mi to nějaký místní guru potvrdil, abych nešel z cesty :-)
Jan Tvrdík
Profil
Tori, Klicpera:
Mi přijde, že to s těmi assercemi akorát komplikujete.
'/\s(a[1-5]|[1-5]a)\s/i'

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: