Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenia Regularne - problemy, kilka pytań
MP1
post
Post #1





Grupa: Zarejestrowani
Postów: 194
Pomógł: 0
Dołączył: 22.09.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


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ą).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
.dragonfly
post
Post #2





Grupa: Zarejestrowani
Postów: 217
Pomógł: 0
Dołączył: 5.10.2003
Skąd: Londyn / UK

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $f3s_tx = preg_replace( &#092;"#<odp>(.+?)</odp>#is\", \"1\", $f3s_t);
  3. ?>
Go to the top of the page
+Quote Post
MP1
post
Post #3





Grupa: Zarejestrowani
Postów: 194
Pomógł: 0
Dołączył: 22.09.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


Niestety, nie działa. (IMG:http://forum.php.pl/style_emoticons/default/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>.

Ten post edytował MP1 25.09.2004, 13:16:56
Go to the top of the page
+Quote Post
kicaj
post
Post #4





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


  1. <?php
  2. preg_replace( '/(<odp>)(.*?)(</odp>)/is', '2', $f3s_tx );
  3. ?>
Go to the top of the page
+Quote Post
MP1
post
Post #5





Grupa: Zarejestrowani
Postów: 194
Pomógł: 0
Dołączył: 22.09.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
sf
post
Post #6





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


  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. ?>
Go to the top of the page
+Quote Post
MP1
post
Post #7





Grupa: Zarejestrowani
Postów: 194
Pomógł: 0
Dołączył: 22.09.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


Działa lepiej, ale są w kodzie jeszcze znaczniki <ODP>.

Co muszę zrobić, aby ich nie było? PRzestawić znaki "#"?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
sf
post
Post #8





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


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ć (IMG:http://forum.php.pl/style_emoticons/default/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 ... ;]

Ten post edytował sf 25.09.2004, 18:06:14
Go to the top of the page
+Quote Post
MP1
post
Post #9





Grupa: Zarejestrowani
Postów: 194
Pomógł: 0
Dołączył: 22.09.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


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ł...
Go to the top of the page
+Quote Post
FiDO
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Za duzo kombinujecie.. to jest wzlednie proste:
  1. <?php
  2.  
  3. $txt = preg_replace(&#092;"#<odp>(.*)</odp>#Usi\", \"1\", $text);
  4.  
  5. ?>
Go to the top of the page
+Quote Post
MP1
post
Post #11





Grupa: Zarejestrowani
Postów: 194
Pomógł: 0
Dołączył: 22.09.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
FiDO
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Dziala, bo sprawdzalem zanim wyslalem.. wiec cos innego musisz robic zle, pokaz wiecej kodu.
Go to the top of the page
+Quote Post
sf
post
Post #13





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

Ostrzeżenie: (0%)
-----


MP1: moje dwa kody tez dzialaly i usuwaly <odp> (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) tylko Tobie cos nie dziala ;]
Go to the top of the page
+Quote Post
MP1
post
Post #14





Grupa: Zarejestrowani
Postów: 194
Pomógł: 0
Dołączył: 22.09.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował MP1 26.09.2004, 18:06:20
Go to the top of the page
+Quote Post
FiDO
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Zmien preg_split na preg_replace
Go to the top of the page
+Quote Post
MP1
post
Post #16





Grupa: Zarejestrowani
Postów: 194
Pomógł: 0
Dołączył: 22.09.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


Cytat(FiDO @ 2004-09-26 22:46:19)
Zmien preg_split na preg_replace

Preg_replace mi tutaj nie działa, niestety.
Go to the top of the page
+Quote Post
FiDO
post
Post #17





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
MP1
post
Post #18





Grupa: Zarejestrowani
Postów: 194
Pomógł: 0
Dołączył: 22.09.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


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


(IMG:http://forum.php.pl/style_emoticons/default/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... (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował MP1 7.10.2004, 19:00:34
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 10:37