Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażaj sie regularnie :-)
Forum PHP.pl > Forum > PHP
cezary188
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?
cycofiasz
Pokaż kod który Ci wyciąga cały tag
cezary188
Mozna tak
  1. '<h1 title=".*.">'
a mozna i tak
  1. '<h1 title=\"([a-zA-Z0-9._\!\@\#\$\%\^\&\*\(]*)">'
jedno i drugie powoduje mniej wiecej to samo.
Fifi209
A można i tak:
  1. <h1 title="(.*?)">
cezary188
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 ?
Fifi209
jeżeli zastosujesz powiedzmy:

preg_match($mojewyrazenie, $twojstring, $znalezione)

to w $znalezione[1] masz to bez tagow
cezary188
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.
cycofiasz
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
cezary188
Czyli mam rozumiec ze nie darady tego zrobic w jednej linijce poprzez samo wyrazenie tylko ?
cycofiasz
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].
by_ikar
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>';
m44
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
Fifi209
@pawel
Prościej (.*?) co ja już napisałem

@m44
phpQuery ;-)
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.