Autor | Zpráva | ||
---|---|---|---|
nemeja Profil |
Zdravím,
snažím se vytvořit si svuj šablonovací systém, nicméně ted jsem narazil na problém s regulárním výrazem na masku, která představuje podmínku ?[hodnota1]==[hodnota2]_OR_[hodnota3]!=[hodnota4]_AND_... zde dávám náhled mého posledního snažní /\?([a-zA-ZO-9_\-])([=!<>]{1,3})(.*)(([a-zA-ZO-9_\-])([=!<>]{1,3})(.*)([AND|OR|&&|\|\|])+)/ potřebuju aby to začínalo otazníkem a vždycky první část podmínky byla [a-zA-Z0-9_] pak možnost operátorů což jsem napsal jako [=!<>]{1,3}, druhá část podmínky cokoliv (.*), další část už nemusí být vždy _OR|AND|&&|\|\|_ a zase znova Děkuji za radu |
||
Tori Profil |
#2 · Zasláno: 15. 4. 2012, 09:00:27
Za podmínkou asi následuje část, která se má/nemá zobrazit + sekvence pro konec podmíněné části, ne? Asi bych nejdřív jedním regulárem našla jen celý blok (tedy rozlišit jen hlavní části:
[otazník = začátek bloku] [podmínka: jakékoli znaky] [konec podmínky] [jakékoli znaky] [konec bloku] $re = '~(?:(?:\s*_(?<condJoin>OR|AND|&&|\\|\\|)_\s*)?\\[(?<leftSide>[a-zA-Z0-9_-]+?)\\]\s*(?<comparison>[=!<>]{1,3})\s*\\[(?<rightSide>[a-zA-Z0-9_-]+?)\\])~s'; preg_match_all($re, $blok['podminka'], $podminky, PREG_SET_ORDER) |
||
nemeja Profil |
#3 · Zasláno: 15. 4. 2012, 12:45:43
děkuji, bílé znaky jsem striktně zakázal a měním je za "_"
|
||
nemeja Profil |
#4 · Zasláno: 15. 4. 2012, 15:38:41
Tori:
nefunguje :(, zkoušel jsem tenhle vstup a neprojde to $vstup = "?ja==ty_AND_on==ona_OR_my<vy_&&_nic>nic_||_moc!=prílis"; |
||
Tori Profil |
#5 · Zasláno: 15. 4. 2012, 15:46:52
nemeja:
Podle [#1] jsem myslela, že hodnoty mají být v hranatých závorkách, tak je vyhoďte z reguláru. I tak vám to nezachytí poslední podmínku kvůli diakritice ("prílis"). |
||
nemeja Profil |
Děkuju, už to
Změna :D vrací to nesmyslný hodnoty $vstup = "?ja==ty_AND_on==ona"; $reg = '~(?:(?:_(?<condJoin>OR|AND|&&|\\|\\|)_)?(?<leftSide>[a-zA-Z0-9_-]+?)(?<comparison>[=!<>]{1,3})(?<rightSide>[a-zA-Z0-9_-]+?))~s'; array 0 => array 0 => string 'ja==t' (length=5) 1 => string 'y_AND_on==o' (length=11) 'condJoin' => array 0 => string '' (length=0) 1 => string '' (length=0) 1 => array 0 => string '' (length=0) 1 => string '' (length=0) 'leftSide' => array 0 => string 'ja' (length=2) 1 => string 'y_AND_on' (length=8) 2 => array 0 => string 'ja' (length=2) 1 => string 'y_AND_on' (length=8) 'comparison' => array 0 => string '==' (length=2) 1 => string '==' (length=2) 3 => array 0 => string '==' (length=2) 1 => string '==' (length=2) 'rightSide' => array 0 => string 't' (length=1) 1 => string 'o' (length=1) 4 => array 0 => string 't' (length=1) 1 => string 'o' (length=1) Takže konečně jsem přišel ke konečnému řešení $reg = "~(_(AND|OR|&&|\|\|)_*)([a-zA-Z0-9-]+)([=!<>]{1,3})([a-zA-Z0-9-]+)~"; |
||
Časová prodleva: 12 let
|
0