Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z preg_match
Forum PHP.pl > Forum > Przedszkole
roobik
Witam.
Mam "mały" problem z preg_match. Wiem... pisano o tym na Forum już wiele razy, ale nie potrafie tego wykorzystać pod "if'ki".

O co chodzi.
Z bazy "wyjmuję" poprzez $text wszystko to, co w tym polu (ale odkrycie wink.gif ) Problem jest w tym, że aktualnie mam ponad 4700 rekordów i potrzebuję to wszystko jakoś poukładać "by żyło się lepiej" wink.gif
Problem tkwi w tym, że w $text znajdują się różne wyrażenia "Rzeczpospolita", albo "Wyborcza". Na przykład
id 1 : gdzieś między tagami <iframe></iframe> znajduje się słowo "Rzeczpospolita"
id2: gdzieś między tagami <iframe></iframe> znajduje się słowo "Wyborcza".

Kombinuję coś na styl:
  1. if($text='#<iframe">(.*?)</a>#', Rzeczpospolita, cos2);

Podobnie z wyrażeniem "Wyborcza".
Po prostu nie wiem, co mam dać jakoś "cos2"

Co chcę osiągnąć?
"jeśli gdzieś między tagami <iframe></iframe> znajdziesz "Rzeczpospolita" -> pokaż <img src="rp.img">"
oraz drugi "if'ek":
"jeśli gdzieś między tagami <iframe></iframe> znajdziesz "Wyborcza" -> pokaż <img src="wy.jpg">

Mam nadzieję, ze szczegółowo opisałem...

Z góry bardzo WIELKIE dzięki!
com
if($text='#<iframe">(.*?)</a>#', Rzeczpospolita, cos2); co to za krzaki zajrzyj do manuala preg_match
klima06
  1. if(preg_match("/<iframe>(.*)Rzeczpospolita(.*)<\/iframe>/i", $text)){
  2.  
  3. }
roobik
Cytat(klima06)
if(preg_match("/<iframe>(.*)Rzeczpospolita(.*)<\/iframe>/i", $text)){...

Niestety, ale nie działa. Trochę się pomęczyłem i taki zapis:
  1. if(preg_match("!Rzeczpospolita!si", $text)) { ...

jest OK (działa).

Ale czy mogę prosić jakieś wyjaśnienie? (robiłem to na chybił-trafił)...
Jak to w końcu jest, że mimo, że w polu text znajduje się fraza Rzeczpospolita i w dodatku jest ona między znacznikami iframe - to jak chcę wyszukać z zastrzeżeniem, że ma wyszukać między <iframe> </iframe>, to działa i bez tego "zastrzeżenia"...?

Jak to u mnie wygląda (treść w polu text wywoływana przez $text?
np.
id 1:
Cytat
Jak donosi "Rzeczpospolita"... itd


id 2:
Cytat
Jak donosi "Gazeta Wyborcza"... itd

klima06
Cytat(roobik @ 12.10.2013, 22:39:40 ) *
Co chcę osiągnąć?
"jeśli gdzieś między tagami <iframe></iframe> znajdziesz "Rzeczpospolita" -> pokaż <img src="rp.img">"
oraz drugi "if'ek":
"jeśli gdzieś między tagami <iframe></iframe> znajdziesz "Wyborcza" -> pokaż <img src="wy.jpg">

Mój kod bardzo dobrze działał, oto test:
  1. $test1 = "Ble Ble ble <iframe>ble ble Rzeczpospolita ble ble</iframe> ble ble";
  2. $test2 = "Ble Rzeczpospolita ble <iframe>ble ble ble ble</iframe> ble ble";
  3. if(preg_match("/<iframe>(.*)Rzeczpospolita(.*)<\/iframe>/i", $test1)){
  4. echo 'Test 1 - True<br />';
  5. }else{
  6. echo 'Test 1 - False<br />';
  7. }
  8. if(preg_match("/<iframe>(.*)Rzeczpospolita(.*)<\/iframe>/i", $test2)){
  9. echo 'Test 2 - True<br />';
  10. }else{
  11. echo 'Test 2 - False<br />';
  12. }

Wynik:
Cytat
Test 1 - True
Test 2 - False

True jest tylko wtedy kiedy fraza zostanie znaleziona pomiędzy tagami <iframe>.
roobik
Tak, zgadza się... Jest jednak małe "ale".
Otóż tu chodzi raczej o to, że frazy: "Rzeczpospolita" oraz "Wyborcza" są w cudzysłowiu (" ").
Coraz rzadziej potrzebuję pomocy na Forum, ale po prostu nurtuje mnie takie pytanie:
Dlaczego Twój zapis:
Cytat(klima06)
if(preg_match("/<iframe>(.*)Rzeczpospolita(.*)<\/iframe>/i", $text)){ ...

nie działa u mnie
a mój "przekombinowany" kod, czyli
Cytat
if(preg_match("!Rzeczpospolita!si", $text)) { ...

działa całkiem poprawnie...?

Może za bardzo kombinuję, ale może tu chodzi o to, że u Ciebie jest w kodzie /i, a u mnie jest si ?

Chwilowo tego po prostu nie rozumiem...
Jeśli znasz odp - byłbym wdzięczny - oczywiście daję "Pomógł" smile.gif

Pozdrawiam!
klima06
/i oznacza, że pattern nie patrzy czy są duże czy małe litery.
/s oznacza, że jeśli w patternie występuje . (kropka) to zastępuje ona dowolny znak włączając znak nowej linii (bez /s znak nowej linii nie wliczałby się w .) (możesz to śmiało wywalić ze swojego patternu).


Twój pattern !Rzeczpospolita!si po prostu sprawdza czy w zmiennej $text znajduje się słowo Rzeczpospolita (nie ważne czy dużymi czy małymi literami pisana). Mój zaś pattern sprawdzał czy to słowo występuje pomiędzy tagami <iframe>.
roobik
I właśnie o to chodziło smile.gif
klima06 - dzięki WIELKIE!!!

Właśnie potestowałem to wszystko u siebie - jest jak najbardziej w porządku smile.gif

Jeszcze raz dziękuję! smile.gif

Pozdrawiam!
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.