Autor | Zpráva | ||
---|---|---|---|
Zechy Profil |
#1 · Zasláno: 26. 4. 2013, 22:57:18
Zdravím,
mám text ve formátu "= nějáký text =", kdy chci takhle odlišit nadpisy, ovšem problémem je, že se mi nedaří napsat preg_match, který by získal to co potřebuju, povedlo se mi maximálně získat jedno rovná se, a to možná ještě z konce řádku. Regulérní výraz mám v tomto tvaru: (To teda nic nevyhledá) preg_match_all("/\=[A-z+(ěščřžýáíé)+(ĚŠČŘŽÝÁÍÉ)?\s]\=/", $obsah, $match); |
||
Tori Profil |
Pokud jsou nadpisy na samostatném řádku (jako např. wiki syntax), tak by stačilo i něco takovéhoto:
echo preg_replace('~(?:^=\h*)(.+)(?:=\h*$)~m', '<h1>$1</h1>', $text); |
||
Zechy Profil |
#3 · Zasláno: 26. 4. 2013, 23:19:37
Tori:
Jojo, jedná se o samostatnej řádek, děkuju. Tohle mi zabere půl století než ty regulérní výrazy pochopim :-) |
||
Tori Profil |
Trochu jsem to zjednodušila, aserce byly zbytečné.
Dá se to snadno upravit na nahrazování == → h2, === → h3 atd. echo preg_replace_callback('~(?:^(=+)\h*)(.+)(?:\1\h*$)~m', function($m) { $tag = 'h'.min(strlen($m[1]), 6); return "<$tag>$m[2]</$tag>"; }, $text); |
||
1Pupik1989 Profil |
Já používám něco podobného.
$text = preg_replace_callback("~(\=+)\s*([^\=]+)\=+~",function($m){ $tag = 'h'.max(strlen($m[1]),6); return '<'.$tag.'>'.$m[2].'</'.$tag.'>'; },$text); Více méně myšlenka je ta samá. |
||
Tori Profil |
1Pupik1989:
„Více méně myšlenka je ta samá.“ Řádek 2 máte naopak (min/max) - vytvoří se vám nadpis minimálně H6 (když zadám 1-6 rovnítek) nebo s vyšším číslem. Ale na druhou stranu najde nadpis kdekoli, nejen na samostatném řádku. |
||
Zechy Profil |
#7 · Zasláno: 27. 4. 2013, 19:44:19
Tak ono stačí najít pouze jedno rovná se, bo v popisu už se žádný nadpis vyskytovat nebude
|
||
Časová prodleva: 11 let
|
0