Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia Regularne - problemy
Forum PHP.pl > Forum > PHP
MP1
1. Ereg_replace
  1. <?php
  2. $f3s_tx=eregi_replace(&#092;"<odp>([[:alnum:]])</odp>\",'1',$f3s_t);
  3. ?>


Skrypt miał za zadanie zamienić podany ciąg znaków: "<odp>...</odp>" na to, co znajduje się pomiędzy znacznikami. Niestety, tak się nie dzieje, a w zmiennej $f3s_tx jest wszystko, co znajduje się w $f3s_t - czyli zawartość pliku template'u.


Jak ten problem zostanie rozwiązany, przejdę do następnych (jeśli nie ustąpią).
.dragonfly
  1. <?php
  2. $f3s_tx = preg_replace( &#092;"#<odp>(.+?)</odp>#is\", \"1\", $f3s_t);
  3. ?>
MP1
Niestety, nie działa. sad.gif

Może tu trzeba użyć coś z Implode albo Explode? Chodzi o to, by w zmiennej pozostało tylko to, co jest w znaczniku <ODP>.
kicaj
  1. <?php
  2. preg_replace( '/(<odp>)(.*?)(</odp>)/is', '2', $f3s_tx );
  3. ?>
MP1
Kicaj_ - Też nie działa... Może coś mam źle w kodzie wogóle:? Ale raczej dobrze!

Nie da się tego zrobić za pomocą innego polecenia?
sf
  1. <?php
  2.  
  3. $f3s_t='test<odp>ble < 234 ble bla</odp> eh';
  4.  
  5. $f3s_tx = preg_split( &#092;"#<odp>(.+?)</odp>#is\", $f3s_t, -1, PREG_SPLIT_DELIM_CAPTURE);
  6.  
  7. echo $f3s_tx[1];
  8.  
  9. ?>
MP1
Działa lepiej, ale są w kodzie jeszcze znaczniki <ODP>.

Co muszę zrobić, aby ich nie było? PRzestawić znaki "#"?questionmark.gif
sf
Chodzi o to, że masz w kodzie kilka znaczników <odp> </odp> ?

  1. <?php
  2. $f3s_t='ble<odp>pierwszy tekst</odp><odp>drugi tekst</odp>tekst jakis<odp>trzy</odp>';
  3.  
  4. $f3s_tx = preg_split(&#092;"#<odp>(.+?)</odp>#is\", $f3s_t, -1, PREG_SPLIT_DELIM_CAPTURE);
  5.  
  6. foreach($f3s_tx as $nr => $sth) {
  7. if($nr % 2) {
  8. echo $sth;
  9. }
  10. }
  11.  
  12. ?>


w sumie jestem ciekaw czy można to prościej zrobić tongue.gif

EDIT:

  1. <?php
  2. $f3s_tx=preg_replace(&#092;"#(.*?)<odp>(.*?)</odp>(.*?)#\",\"2\",$f3s_t);
  3.  
  4. echo $f3s_tx;
  5. ?>


dostaniesz tylko tekst, który był między znacznikami <odp> i </odp>, nic więcej ... ;]
MP1
Tak, chodzi o to, że skrypt:
  1. <?php
  2. $f3s_tx = preg_split( &#092;"#<odp>(.+?)</odp>#is\", $f3s_t, -1, PREG_SPLIT_DELIM_CAPTURE);
  3. ?>

już działał prawie dobrze, ale pozostawiał po sobie znacznik <ODP> oraz </ODP>.

W kodzie są 2 takie znaczniki: otwierający(<ODP>) i zamykający(</ODP>).

Na to wychodzi, że tu należy odpowiednio użyć Preg_split().
Tylko co należałoby przerobić? Ja też będę kombinował...
FiDO
Za duzo kombinujecie.. to jest wzlednie proste:
  1. <?php
  2.  
  3. $txt = preg_replace(&#092;"#<odp>(.*)</odp>#Usi\", \"1\", $text);
  4.  
  5. ?>
MP1
Fido - też nie działa. Wyślę cały plik, który jest w zmiennej $f3s_t.
A jeśli zastosuję PREG_SPLIT z twoim wyrażeniem, to tak samo jak z poprzednimi - znacznik <ODP> zostaje.

A w zmiennej powinno być wszystko, co znajduje się W ŚRODKU znacznika <ODP>.

  1. <?php //charset=iso-8859-2 ?>
  2. <table cellspacing="0" cellpadding="1" class="{tclass}">
  3. <tr><td class="{pytclass}">{pyt}</td></tr>
  4. <tr><td class="{odpclass}">
  5.  
  6. <odp>{odp}<br />s</odp>
  7.  
  8. </td></tr>
  9. <tr><td class="{dolclass}"><input type="button" value="Głosuj" onclick="{glos}" /> <input type="button" value="Wyniki" onclick="{wyniki}" /></td></tr>
FiDO
Dziala, bo sprawdzalem zanim wyslalem.. wiec cos innego musisz robic zle, pokaz wiecej kodu.
sf
MP1: moje dwa kody tez dzialaly i usuwaly <odp> tongue.gif tylko Tobie cos nie dziala ;]
MP1
Czy w tym kodzie HTML (zmienna: $f3s_t) jest wszystko OK, aby te funkcje działały poprawnie? Jeśli tak, prześlę fragment pliku z kodem php.

DODANE: Sposób przypisania pliku do zmiennej i funkcja.

  1. <?php
  2.  
  3. $f3s_t=file_get_contents($f3s_kats.&#092;"pytania.php\");
  4. $f3s_tx=preg_split(&#092;"#<odp>(.*)</odp>#Usi\",\"1\",$f3s_t);
  5.  
  6. ?>
FiDO
Zmien preg_split na preg_replace
MP1
Cytat(FiDO @ 2004-09-26 22:46:19)
Zmien preg_split na preg_replace

Preg_replace mi tutaj nie działa, niestety.
FiDO
A konkretnie to co nie dziala? Jakies bledy?

preg_split to zupelnie inna funkcja i nie mozna ich stosowac zamiennie, preg_replace jest tutaj odpowiedni. Zrob moze cos takiego:
  1. <?php
  2.  
  3. $f3s_t=file_get_contents($f3s_kats .&#092;"pytania.php\");
  4. var_dump($f3s_t);
  5. $f3s_tx=preg_replace(&#092;"#<odp>(.*)</odp>#Usi\",\"1\",$f3s_t);
  6. var_dump($f3s_tx);
  7.  
  8. ?>

i pokaz co Ci wyswietla.
MP1
1. Wynik po wygenerowaniu.
a) widoczny na stronie:
Kod
string(379) " {pyt}
{odp}
s
 
" string(368) " {pyt}
{odp}
s
 
" s Test SONDA
{pyt}
odp1
s
 
{pyt}
odp2
s
 
{pyt}
odp3
s


cool.gif w kodzie HTML:
  1. string(379) "<?php //charset=iso-8859-2 ?>
  2. <table cellspacing="0" cellpadding="1" class="{tclass}">
  3. <tr><td class="{pytclass}">{pyt}</td></tr>
  4. <tr><td class="{odpclass}"><odp>{odp}<br />s</odp></td></tr>
  5. <tr><td class="{dolclass}"><input type="button" value="Głosuj" onclick="{glos}" /> <input type="button" value="Wyniki" onclick="{wyniki}" /></td></tr>
  6. "
  7. string(368) "<?php //charset=iso-8859-2 ?>
  8. <table cellspacing="0" cellpadding="1" class="{tclass}">
  9. <tr><td class="{pytclass}">{pyt}</td></tr>
  10. <tr><td class="{odpclass}">{odp}<br />s</td></tr>
  11. <tr><td class="{dolclass}"><input type="button" value="Głosuj" onclick="{glos}" /> <input type="button" value="Wyniki" onclick="{wyniki}" /></td></tr>
  12. "
  13. s<?php //charset=iso-8859-2 ?>
  14. <table cellspacing="0" cellpadding="1" class="</span>">
  15. <tr><td class="</span>">Test SONDA</td></tr>
  16. <tr><td class=""><<<span style='color:blue'>span style='color:blue'>odp><form id="f3sonda" action="go=glos" method="post"><input type="hidden" name="f3s_ids" value="1" /><?php //charset=iso-8859-2 ?>
  17. <table cellspacing="0" cellpadding="1" class="{tclass}">
  18. <tr><td class="{pytclass}">{pyt}</td></tr>
  19. <tr><td class="{odpclass}"><input type="checkbox" name="f3s_opcje" value="0" /> odp1<br />s</td></tr>
  20. <tr><td class="{dolclass}"><input type="button" value="Głosuj" onclick="javascript:f3sonda.submit()" /> <input type="button" value="Wyniki" onclick="gosonda=wyniki" /></td></tr>
  21. <?php //charset=iso-8859-2 ?>
  22. <table cellspacing="0" cellpadding="1" class="{tclass}">
  23. <tr><td class="{pytclass}">{pyt}</td></tr>
  24. <tr><td class="{odpclass}"><input type="checkbox" name="f3s_opcje" value="1" /> odp2<br />s</td></tr>
  25. <tr><td class="{dolclass}"><input type="button" value="Głosuj" onclick="javascript:f3sonda.submit()" /> <input type="button" value="Wyniki" onclick="gosonda=wyniki" /></td></tr>
  26. <?php //charset=iso-8859-2 ?>
  27. <table cellspacing="0" cellpadding="1" class="{tclass}">
  28. <tr><td class="{pytclass}">{pyt}</td></tr>
  29. <tr><td class="{odpclass}"><input type="checkbox" name="f3s_opcje" value="2" /> odp3<br />s</td></tr>
  30. <tr><td class="{dolclass}"><input type="button" value="Głosuj" onclick="javascript:f3sonda.submit()" /> <input type="button" value="Wyniki" onclick="gosonda=wyniki" /></td></tr>

Co w takim wypadku mam zrobić? Może podacie jakieś dobre porady na temat wyrażeń regularnych?

A może są inne i łatwiejsze sposoby? Nikt nie wie? Czekam... sad.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.