Autor Zpráva
monarcha
Profil
ahoj všem.
V regulárních výrazech nejsem tak moc zběhlej a pořádně si nevim rady. Chtěl bych udělat následující věc:
vstupní řetězec vypadá např
"text text [code]<html>...</html>[/code]" zase nějakej text

já bych chtěl zvýraznit syntaxi html kódu, kterej je uvedenej mezi značkama [code]. Napsal jsem si proto regulární výraz:
$vstup = ereg_replace("\[code\]([^[]*)<([^[]*)>([^[]*)\[/code\]","[code]\\1[x]<\\2>[x]\\3[code]",$vstup);

, který by měl jakejkoliv tag ohraničit značkami [x]. Problém je v tom, že tengle příkaz to provede pouze pro poslední tag a ostatní ignoruje
djlj
Profil
monarcha
Použij modifikátor /U. Ale nevím, jestli to umí i ereg_replace, já používám preg_replace.
MzM
Profil *
Pokud chceš přidávat [x] jenom pro tagy vrámci [code], a jsou jinde ještě taky nějaké tagy, tak si myslím, že to nebude tak triviální, tedy, že to nepůjde jedním regexpem. Ale třeba se mýlím. Nic méně pokud vyhledáváš to, co je a co není tag, tak jako začátek použiješ to < a pak všechno, co není > je vnitřek tagu -> (<[^>]+>) je výraz pro celý tag, a nemůže se ti stát, že to vezme více tagů naráz.
monarcha
Profil
ok, předělám to na víc výrazů.
Měl bych ale ještě jeden dotaz. Např. výraz \[b\]([^[]*)\[/b\] najde všechny kusy textu, který jsou obklíčený značkama [ b] a [/b], ale jenom pokud někde mezi značkama není "[". Jak se ale řeší situace, kdy mám [ b]([ i]text[/i])[/b] a chci najít to co je v závorkách?
krteczek
Profil
nebylo by jednodužší to [code] nahradit třeba <code class="vypis_kodu"> (pokud je to specialni vypis, jinak by stačilo i jen to <code> a v css nastavit code{font-weight:bolder}
je to jednodužší. krteczek
krteczek
Profil
sry, myslím že bys měl hledat dvojice ..., vždycky musíš najít pár, pokud se to nepovede neměl bys převádět ten daný tag ani jeden, ale jak to provézt netuším, perfektně to má vyřešené texy! možná bych ti doporoučil jeho integraci do systému a tento [b] zápis bych vyloučil...
monarcha
Profil
kdyby někoho zajímal výsledek toho vnořeného rozpoznávání:
nakonec jsem to vyřešil tak, že jsem místo funkce ereg_replace použil funkci preg_replace, která umožňuje i "syté" vyhledávání. Díky této volbě bylo možné RE zapsat \[b\](.*?)\[/b\]
Toto téma je uzamčeno. Odpověď nelze zaslat.

0