Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażaj sie regularnie :-), Problem z wyrażeniem
cezary188
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 31.07.2010

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


Otoz mam problem z wyrażeniami. Potrzebuje wyciaganc przykladowo z tego:
  1. <h1 title="Apocalypse.2010.PL.DVDRip.XViD.rar">
to:
  1. Apocalypse.2010.PL.DVDRip.XViD.rar
czyli sama nazwe nie bardzo wiem jak zaznaczyc zeby po znalezieniu tagu h1 title wyciagal tylko sama nazwe bo narazie wyciga mi caly tag. Dodam ze nie mam mozliwosci filtracji wyniku wiec jedyne co moge to odpowiednio skonstruowac wyrazenie zeby zwracalo tresc w zadanej formie. Ktos pomoze?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
cycofiasz
post
Post #2





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Pokaż kod który Ci wyciąga cały tag
Go to the top of the page
+Quote Post
cezary188
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 31.07.2010

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


Mozna tak
  1. '<h1 title=".*.">'
a mozna i tak
  1. '<h1 title=\"([a-zA-Z0-9._\!\@\#\$\%\^\&\*\(]*)">'
jedno i drugie powoduje mniej wiecej to samo.
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


A można i tak:
  1. <h1 title="(.*?)">


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
cezary188
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 31.07.2010

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


Owszem i daje to mniej wiecej to samo co juz mam. Pytanie jest czy niedarady tego zrobic tak zeby TYLKO sama nazwa mi sie wyswietlala bez tagow ?
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


jeżeli zastosujesz powiedzmy:

preg_match($mojewyrazenie, $twojstring, $znalezione)

to w $znalezione[1] masz to bez tagow


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
cezary188
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 31.07.2010

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


Wiem o tym, ale pytanie dotyczy czego innego jak to zrobic bez wskazuwania pozycji [1]. Da sie wogole? Zeby znajdowalo to co w tagu ale wynik pokazywalo od momentu rozpoczecia sie tresci tagu do jego zakonczenia czyli wlasnie sam tytul bez niczego innego. Myslałem nad zastosowaniem ^ $ czy + oraz nawiasow ale nie bardzo wiem jak to rozpracowac.
Go to the top of the page
+Quote Post
cycofiasz
post
Post #8





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


A dlaczego "wskazywanie pozycji" stanowi problem? Tak już działa preg_match że w pierwszym elemencie tablicy jest cały tekst a dopiero w następnych to co w nawiasach
Go to the top of the page
+Quote Post
cezary188
post
Post #9





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 31.07.2010

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


Czyli mam rozumiec ze nie darady tego zrobic w jednej linijce poprzez samo wyrazenie tylko ?
Go to the top of the page
+Quote Post
cycofiasz
post
Post #10





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Od kiedy programujesz w php? Bo mam wrażenie że od tygodnia, od takich tematów jest dział przedszkole.

Jak chcesz mieć w "jednej linijce" to se zrób funkcję która zwróci tylko $znalezione[1].
Go to the top of the page
+Quote Post
by_ikar
post
Post #11





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Cytat(cezary188 @ 26.12.2011, 16:26:20 ) *
Mozna tak
  1. '<h1 title=".*.">'
a mozna i tak
  1. '<h1 title=\"([a-zA-Z0-9._\!\@\#\$\%\^\&\*\(]*)">'
jedno i drugie powoduje mniej wiecej to samo.


Ale po co sobie wydłużać niepotrzebnie wyrażenie, raz pakując duże litery, co można zrobić stosowną flagą, a dwa - umieszczając wszystkie możliwe znaczniki.. Najprościej to użyć czegoś co wystąpić nie może. Z racji że title ma swój początek który zaczyna cudzysłów lub apostrof, to koniec ma własnie jako cudzysłów lub apostrof. Zatem najlogiczniej byłoby użyć negacji cudzysłowia lub apostrofu:

  1. <?php
  2.  
  3. $str = '<h1 title="Apocalypse.2010.PL.DVDRip.XViD.rar"> ';
  4.  
  5. preg_match('/<h1 title="([^"]+)">/', $str, $znalezione);
  6.  
  7. echo '<pre>'.print_r($znalezione[1], true).'</pre>';
Go to the top of the page
+Quote Post
m44
post
Post #12





Grupa: Zarejestrowani
Postów: 63
Pomógł: 10
Dołączył: 16.11.2008

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


Do parsowania HTML-a nie używaj wyrażeń regularnych tylko np. Simplehtmldom lub nawet czegoś wbudowanego w PHP do XML-a.
Chyba, że robisz to "dla sportu" smile.gif
Go to the top of the page
+Quote Post
Fifi209
post
Post #13





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


@pawel
Prościej (.*?) co ja już napisałem

@m44
phpQuery ;-)


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
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: 20.08.2025 - 18:57