Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z preg_match
roobik
post
Post #1





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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!

Ten post edytował roobik 12.10.2013, 22:40:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
com
post
Post #2





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


if($text='#<iframe">(.*?)</a>#', Rzeczpospolita, cos2); co to za krzaki zajrzyj do manuala preg_match
Go to the top of the page
+Quote Post
klima06
post
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 10
Dołączył: 21.10.2011
Skąd: UK / PL

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


  1. if(preg_match("/<iframe>(.*)Rzeczpospolita(.*)<\/iframe>/i", $text)){
  2.  
  3. }
Go to the top of the page
+Quote Post
roobik
post
Post #4





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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



Ten post edytował roobik 14.10.2013, 18:22:38
Go to the top of the page
+Quote Post
klima06
post
Post #5





Grupa: Zarejestrowani
Postów: 48
Pomógł: 10
Dołączył: 21.10.2011
Skąd: UK / PL

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


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

Ten post edytował klima06 14.10.2013, 19:29:17
Go to the top of the page
+Quote Post
roobik
post
Post #6





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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!

Ten post edytował roobik 14.10.2013, 19:44:29
Go to the top of the page
+Quote Post
klima06
post
Post #7





Grupa: Zarejestrowani
Postów: 48
Pomógł: 10
Dołączył: 21.10.2011
Skąd: UK / PL

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


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





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

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


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!
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: 21.08.2025 - 09:09