Autor Zpráva
Balin.Tomas
Profil *
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
[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 *
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
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 *
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
Balin.Tomas:

Použijte obecný regulár a funkci preg_replace_callback a poté rozhodněte jak si to naIFujete
Majkl578
Profil
[#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
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.

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