Autor | Zpráva | ||
---|---|---|---|
Balin.Tomas Profil * |
#1 · Zasláno: 15. 12. 2011, 15:33:59
Zravim všechny a prosím o pomoc.Pokud mám toto:
$html = preg_replace('/index\.php\?cat=([a-z0-9]+)/i','kategorie-$1'.$nazev_kategorie.'.html',$html); Funguje jak má jen bych potřeboval poradit, pokud ?cat=10001 a víc mohlo by toto fungovat nebo by to muselo být zadané jinak? $html = preg_replace('/index\.php\?cat=([a-z10001]+)/i','kategorie-$1'.$dalsi_nazev_kategorie.'.html',$html); Díky moc za pomoc |
||
Ugo Profil |
#2 · Zasláno: 15. 12. 2011, 15:54:24
[a-z10001]+ je to samé jako [a-z10]+ , je to výpis povolených znaků s tím že některé umějí i posloupnost (a-z,0-9..) plus znamená, že se musí některý z těchto znaků vyskytnout alespoň jednou a vícekrát. Nepochopil jsem přesně otázku tka odpovídám obecně. cat=2, cat=10003 atp. na ten druhý regulár pasovat nebude, ale třeba cat=010pejsek01 ano.
|
||
Balin.Tomas Profil * |
#3 · Zasláno: 15. 12. 2011, 16:08:30
Ugo:
Asi jsem to špatně napsal, jde mi o to že pokud hodnota cat= bude větší nebo rovna 10001 bude nahrazení jiné.To znamená při cat=6 se nahradí $nazev_kategorie a při cat=10006 se nahradí $dalsi_nazev_kategorie
Snad jsem to popsal lépe o co mi jde.Dík |
||
Ugo Profil |
#4 · Zasláno: 15. 12. 2011, 16:32:10
To takhle fungovat nebude, seš v podobnym problému jako jsem byl já při routování :) tady ti ale bude stačit sestavit dotaz kam nebude pasovat to když je číslo menší a dát ho jako první. Přesný regulár mě nenapadá ale ([a-z]*[0-9]{5,}[a-z]*) by mohlo fungovat. Případně si to můžeš projet tim prvnim, poté vzít další kterej ti vytáhne čísla a čislo porovnat s hodnotou, to by chtělo pár proměnejch a řádků navíc.
|
||
Balin.Tomas Profil * |
#5 · Zasláno: 15. 12. 2011, 16:50:04
Já si to myslel že tak jednoduchý to nebude :-) ten $nazev_kategorie je dotaz do databáze, tak to bude jednodušší asi podmínkou.Tak děkuji.
|
||
Kcko Profil |
#6 · Zasláno: 15. 12. 2011, 17:42:03
Balin.Tomas:
Použijte obecný regulár a funkci preg_replace_callback a poté rozhodněte jak si to naIFujete
|
||
Majkl578 Profil |
#7 · Zasláno: 15. 12. 2011, 18:02:46
[#6] Kcko:
On i samotný regulár (tedy dva) bez použití callbacku by nevypadaly až tak složitě: $data = 'lorem ipsum index.php?cat=1009 dolor sit index.php?cat=272727 amet'; $nazevKategorie = 'foo'; $dalsiNazevKategorie = 'bar'; // nahrazení 1-10000 $data = preg_replace('~ index\.php\?cat=( [1-9]\d{0,3} # 1-9999 | 10000 # 10000 )(?!\d) ~ix', 'kategorie-$1' . $nazevKategorie . '.html', $data); // nahrazení 10001-nekonečno $data = preg_replace('~ index\.php\?cat=( 1000[1-9] # 10001-10009 | 100[1-9]\d # 10010-10099 | 10[1-9]\d\d # 10100-10999 | 1[1-9]\d\d\d # 11000-19999 | [1-9]\d\d\d\d # 20000-99999 | [1-9]\d{5,} # 100000-nekonečno )(?!\d) ~ix', 'kategorie-$1' . $dalsiNazevKategorie . '.html', $data); var_dump($data); // lorem ipsum kategorie-1009foo.html dolor sit kategorie-272727bar.html amet |
||
Kcko Profil |
#8 · Zasláno: 15. 12. 2011, 18:53:32
Majkl578:
To jistě ne, ale zde se to vyloženě nabízí. A rozhodně to bude čitelnější, než Vaše funkční ukázka. |
||
Časová prodleva: 12 let
|
0