Autor | Zpráva | ||
---|---|---|---|
fimmos Profil |
#1 · Zasláno: 22. 9. 2005, 15:55:52
Dobrý den,
při psaní fce na formátování textu jsem narazil na tento problém. Při eregi_replace $text = eregi_replace('\(b\)(.+)\(/b\)', '<b>\\1</b>', $text); když zadám text (b)tučné(/b) něco dalšího a (b)opět tučné(/b) tak tučně se to vyznačí vše, i to mezitím, co nemá být tučné(/b) něco dalšího a (b)opět tučné jak se to tedy vyřeší tak, aby byl tučný text jen mezi tím (b) a (/b)? děkuji |
||
Marty Profil |
#2 · Zasláno: 22. 9. 2005, 16:00:35
No tak musíte ty b v závorkách (nebo klidně i je samé) změnit na něco jiného aby to ta fce znovu nevytučnila.
|
||
fimmos Profil |
#3 · Zasláno: 22. 9. 2005, 16:18:05
nechápu...
potřebuji tučně něco pak normálně a pak něco tučně jenže mi to vezmě první a poslední (b) a (/b) a udělá vše tučně |
||
Cenobit Profil |
#4 · Zasláno: 22. 9. 2005, 20:56:24
Hi
$text = eregi_replace('\(b\)([^/(b/)]+)\(/b\)', '<b>\\1</b>', $text); nale nevim jak udelat aby to bralo v potaz cely vyraz (b) a ne jen jednotlive znaky. Zkus prostudovat php.net - myslim ,ze na tohle tam byl priklad. |
||
ah01 Profil |
#5 · Zasláno: 23. 9. 2005, 00:14:45
Obecně se doporučuje používat Perlové reg. výrazy. Nedávno o nich vycházel hezký seriál na Intervalu. A proč nepoužívat lepší věc, když můžeme :-) (funkce pro Perl-Compatible regulární výrazy jsou v PHP od verze 4.2.0)
Váš dotaz mi připomněl věc, co se píše v 5. díle, že regulární výrazy jsou nenasytné, proto je tučné vše od (b) do (/b). To se dá zakázat modifikátorem "U". $text = preg_replace( '~\(b\)(.+)\(/b\)~U', '<b>\\1</b>', $text ); Pokud to 'U' na konci reg. výrazu smažete, bude pak tučné vše od (b) do (/b). --- Mimochodem, místo <b> bych doporučoval spíše tag <strong>. |
||
Oswald Profil |
#6 · Zasláno: 23. 9. 2005, 00:33:00 · Upravil/a: Oswald
Místo (.+), zkus dát (.+?) a mělo by to fungovat. Otazník za kvantifikátorem (doufám, že to platí i v POSIX) vynutí lenost/nasytnost, o které píše ah01.
Update: takže POSIX tohle podle všeho nezná |
||
krteczek Profil |
#7 · Zasláno: 23. 9. 2005, 01:48:34
pokud se skombinují oba vyrazy zde uvedené tak by to mělo fungovat v pořádku, a nebude výraz nenasytný:
...aspoň myslím, když tak mužeš trenovat: http://www.regexp.cz/ krteczek |
||
Oswald Profil |
#8 · Zasláno: 23. 9. 2005, 02:22:43 · Upravil/a: Oswald
Nejjednodušší stejně bude:
Krtecek: [^(/b)] - to matchuje jeden znak, který není žádným ze skupiny uvnitř závorek, což je asi něco jinýho, než jsi chtěl. |
||
fimmos Profil |
#9 · Zasláno: 23. 9. 2005, 11:56:27
Oswald:
jenže to vaše to jen nahradí, regulérní výrazy to nahradí jen když se tam najde ten vzorek. Proto když dám jen (b) a něco a neukončím to, tak to nahradí tím <b> a vše potom bude tučné. ah01: díky... |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0