Autor Zpráva
Gnd
Profil *
Poradí někdo jak formulovat regulární výraz, který by vyhovoval řetězci do prvního výskytu určitého tagu ze zadaného zdrojového kódu?

Dejme tomu, že chci něčím nahradit řetězec ze zdrojového kódu až po první výskyt tagu např. <strong>.

Děkuji za rady
bohyn
Profil
PCRE by vypadal asi nejak takhle:
/^.*?(\<strong\>.*)$/ims

lomitka pred < a > nevim jestli sou nutny, ale radsi sem je tam dal
Gnd
Profil *
/^.*?(\<strong\>.*)$/ims

Tohle je dle me spatne..

Proč tam je ten otazník? A taky proč tam je za > .*? Potřebuji reg. výraz, který odpovídá pouze řetězci do provního výskytu tagu <strong>, přičemž strong se tam může vyskytovat vícekrát. Zpětná lomítka tam být myslím nemusí.
Mastodont
Profil
Ten otazník označuje předchozí .* jako líný výraz.
bohyn
Profil
? je tam proto aby si pro sebe "ukous" co nejmensi cast. Tedy do prvniho vyskytu <strong> ne do posledniho jak by stalo kdyby tam nebyl
(\<strong\>.*) ulozi retezec ktery chces zachovat do $1
Gnd
Profil *
? je tam proto aby si pro sebe "ukous" co nejmensi cast. Tedy do prvniho vyskytu <strong> ne do posledniho jak by stalo kdyby tam nebyl
(\<strong\>.*) ulozi retezec ktery chces zachovat do $1


Me to ale u ERegI_Replace s tim otaznikem vyhazuje chybu...
bohyn
Profil
pouzij
preg_replace()

proto sem psal ze je to PCRE (Perl Compatible Regular Expression)
Gnd
Profil *
proto sem psal ze je to PCRE (Perl Compatible Regular Expression)

Moc děkuji, hned vyzouším..
bohyn
Profil
jinak na tohle nepotrebujes RegEx
$element = "<strong>";
$str = substr($stranka, stripos($element) + strlen($element));
echo $str;
Gnd
Profil *
$element = "<strong>"; $str = substr($stranka, stripos($element) + strlen($element)); echo $str;

To by asi melo taky fungovat... s preg_replace() mi to ale pripada efektnejsi, navic si nejsme jisty ze strlen() dobre funguje pri UTF8, asi bych to musel osetrit..
bohyn
Profil
efektni ano, ale efektivni uz mene ;)
Na UTF-8 to fungovat nebude, ale u regularnich vyrazu bych si tim taky nebyl moc jistej :) , ale nezkousel sem.
pak je jeste moznost pouzit iconv nebo mb rodinu funkci. Bude to efektnejsi nez substr() a efektivnejsi nez preg_replace() :D
BetaCam
Profil
Gnd
navic si nejsme jisty ze strlen() dobre funguje pri UTF8, asi bych to musel osetrit..

Stačí použít Multibyte funkce
_es
Profil
bohyn
Na UTF-8 to fungovat nebude,
Príkazy uvedené Gnd určite budú fungovať správne aj na UTF8.
Síce funkcie substr, stripos a strlen nerobia to, čo ich multibytové ekvivalenty,
ale výsledný reťazec je správny a bude to rýchlejšie, než pri použití multibytových funkcií.
BetaCam
Profil
bohyn
Detail :
$str = substr($stranka, stripos($element) + strlen($element));
ma byt :
$str = substr($stranka, stripos($stranka,$element) + strlen($element));

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: