Autor Zpráva
Zechy
Profil
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
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);
V případě neshodného počtu rovnítek tam ta přebytečná z jedné strany zůstanou.
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
Tak ono stačí najít pouze jedno rovná se, bo v popisu už se žádný nadpis vyskytovat nebude

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: