Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Różnice przy zastosowaniu preg_match obiekotowo a proceduralnie.
linx
post
Post #1





Grupa: Zarejestrowani
Postów: 100
Pomógł: 3
Dołączył: 25.06.2007

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


Witam,

mam problem z zastosowaniem funkcji preg_match(, mianowicie w kodzie napisanym proceduralnie działa prawidłowo.
Lecz zastosowanie tego samego wyrażenia już obiektowo powoduje brak danych w zwracanej tablicy.

Proc:
  1. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $wynik);

Obiek:

  1. ...
  2. public function GetReadMail($rev_number){
  3.  
  4. $this -> rev_number = $rev_number;
  5. $this -> _mail = imap_qprint(imap_body($this -> connect, $this -> rev_number));
  6. //echo $this -> _mail;
  7. //problem jest od
  8. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $this -> matches);
  9. print_r($this -> matches);
  10. ///problem jest do
  11.  
  12. } // Function GetMailHeader EOF
  13. ...



echo i print_r byly dodane do weryfikacji.
Zmienna:
$this -> _mail przyjmuje dane prawidlowo

Jakis pomysl??

Ten post edytował linx 5.09.2012, 10:36:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
styryl
post
Post #2





Grupa: Zarejestrowani
Postów: 223
Pomógł: 27
Dołączył: 16.04.2008
Skąd: Bakutilu

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


A tak:

  1. public function GetReadMail($rev_number){
  2.  
  3. $this -> rev_number = $rev_number;
  4. $this -> _mail = imap_qprint(imap_body($this -> connect, $this -> rev_number));
  5. //echo $this -> _mail;
  6. //problem jest od
  7. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $wynik);
  8. $this -> matches = $wynik;
  9. print_r($this -> matches);
  10. ///problem jest do
  11.  
  12. } // Function GetMailHeader EOF
Go to the top of the page
+Quote Post
redeemer
post
Post #3





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Nie ma różnicy między
  1. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $wynik);
  2. var_dump($wynik);
a
  1.  
  2. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $this->wynik);
  3. var_dump($this->wynik);
Błąd masz gdzieś indziej.

Ten post edytował redeemer 5.09.2012, 13:02:22


--------------------
Go to the top of the page
+Quote Post
linx
post
Post #4





Grupa: Zarejestrowani
Postów: 100
Pomógł: 3
Dołączył: 25.06.2007

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


Wiem że niema znaczenia czy zmienna jest przekazywana przez $wynik czy bezpośrednio do $this->maches
Ale dlaczego prawie że identyczny kod proceduralnie działa a obiektowo nie?
Nawet jak pokombinuje z wyrażeniem na różne sposoby to udaje mi się przekazać jakieś dane do tablicy.
Lecz jest to nie więcej niż 2 elementy w tablicy a powinna być przynajmniej 4 elementowa.

Jakiś jeszcze pomysł, bo ja już ich nie mam.
Go to the top of the page
+Quote Post
redeemer
post
Post #5





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Zrób w metodzie sobie:
  1. ...
  2. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $wynik);
  3. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $this->matches);
  4. var_dump($wynik);
  5. var_dump($this->matches);
  6. exit();
  7. ...
Porównaj dumpy - powinny być takie same. Wniosek: złe wyrażenie regularne, lub $this->_mail zawiera nie dokładnie to co myślisz, że zawiera.


--------------------
Go to the top of the page
+Quote Post
linx
post
Post #6





Grupa: Zarejestrowani
Postów: 100
Pomógł: 3
Dołączył: 25.06.2007

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


Chyba się nie zrozumieliśmy.

Kiedy do czystego pliku wklejam
  1. <?php
  2. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $wynik);
  3. var_dump($wynik);
  4. ?>

to wszystko działa ok.

Kiedy zaczynam to wklejać do jednej z funkcji w obiekcie to już nie działa (tablica zero elementowa)

  1. public function GetReadMail($rev_number){
  2.  
  3. $this -> rev_number = $rev_number;
  4. $this -> _mail = imap_qprint(imap_body($this -> connect, $this -> rev_number));
  5. //echo $this -> _mail;
  6. //problem jest od
  7. preg_match('#(<body.*>)(.*)(</body>)#', $this -> _mail, $this -> matches);
  8. print_r($this -> matches);
  9. ///problem jest do
  10.  
  11. } // Function GetMailHeader EOF


Na pewno problemem nie jest nazwa 3 elementu funkcji preg_match ( $wynik czy $this->matches nie mają tu wpływu).

Bardziej mnie zastanawia czy może trzeba zastosować jakąś pętle albo inne wyrażenie.
Go to the top of the page
+Quote Post
tehaha
post
Post #7





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


Słuchaj @redemmer już Ci napisał, że błąd masz gdzie indziej, więc nie rozumiem, czemu nie możesz się z tym pogodzić.

Możesz sobie wrzucić to:
  1. preg_match('#(<body.*>)(.*)(</body>)#', '<body sssf sdv sd>ssss</body>', $wynik);
  2. var_dump($wynik);

do metody klasy i zobaczysz, że działa tak samo jak poza klasą i błąd jest gdzie indziej. Najprawdopodobniej błąd masz w wyrażeniu regularnym bo zakładasz, że jak działa na banalnym przykładzie to na bardziej skomplikowanej strukturze też zadziała. Nic dokładniej nie da się powiedzieć, ponieważ nie napisałeś co zawiera zmienna $this->_mail;
Go to the top of the page
+Quote Post
cudny
post
Post #8





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


twoje wyrażenie jest zachlanne, musisz dac znak zapytania. pisze z komórki, gotowca nie wstawie bo jestem leniwy tak jak poprawne wyrażenie którego powinieneś użyć smile.gif
poczytaj o wyr. reg. zachlannych i leniwych na Google


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 14:31