Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][inne]wyrażenia regularne - wyciągnięcie wartości atrybutu z tagu input
Forum PHP.pl > Forum > Przedszkole
twardes
Witam,

Poszukuje wyrażenia regularnego które dzięki funmkcji preg_match lub preg_match_all wybierałoby wartość atrybutu "name" oraz "value" z tagu "input" z źródła strony

przykładowo:
chcę aby ze źródła:
  1.  
  2. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  3. <title>New Page 1</title>
  4. </head>
  5.  
  6.  
  7. <input type="hidden" name="email" value="example@domena.pl" /> <input type="hidden" name="nazwa" value="UP Warszawa 20" /><input type="hidden" name="nazwa3" value="wartosc3" />
  8.  
  9. </form>
  10. </body>
  11.  
  12. </html>


wyciągnąć wartości:
email;example@domena.pl
nazwa;UP Warszawa 20
nazwa3;wartosc3
...

Jak musiałoby wyglądać takie wyrażenie

Czy jest szansa aby ktoś pomógł?






//------------------------------------------------------------------------





znalazłem już pasujące wyrażenie ale nie działa jakbym chciał mianowicie

preg_match_all('/<input type="([\w\s\.\+\-\=\_\:\;^\"]*)" name="([\w\s\.\+\-\=\_\:\;^\"]*)" value="([\w\s\.\+\-\=\_\:\;^\"]*)"([^<]+)*(?snitch.gif(.*)<\/\1>|\s+\/>)/',
$source, $daneT);

nie uwzglednia poslkich znaków, omija pola w których sa polskie litery

wookieb
Gdy pytają mnie: "Jakie wyrażenie regularne zastosować do [tutaj lista życzeń]"
Odpowiadam: PHPQuery - skoro nie znacie wyrażeń regularnych.
motyl-pl
  1. <?php
  2. $strona = '<html>
  3.  
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  6. <title>New Page 1</title>
  7. </head>
  8.  
  9. <body>
  10. <form>
  11.  
  12. <input type="hidden" name="email" value="example@domena.pl" /> <input type="hidden" name="nazwa" value="UP Warszawa 20" /><input type="hidden" name="nazwa3" value="wartosc3" />
  13.  
  14. </form>
  15. </body>
  16.  
  17. </html>';
  18.  
  19. preg_match_all('<input type="hidden" name="email" value="(.+?)" />',$strona,$categoria);
  20. $tekst= strip_tags($categoria[1][0]);
  21. preg_match_all('<input type="hidden" name="nazwa" value="(.+?)" />',$strona,$categoriaa);
  22. $tekst2=strip_tags($categoriaa[1][0]);
  23. preg_match_all('<input type="hidden" name="nazwa3" value="(.+?)" />',$strona,$categoriab);
  24. $tekst3=strip_tags($categoriab[1][0]);
  25.  
  26. echo $tekst."<br>";
  27. echo $tekst2."<br>";
  28. echo $tekst3."<br>";
  29. ?>
twardes
Serdeczne dzięki, ale po 2 dniach testów udało mi się udoskonalić kod

  1. $patern = '([0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s\.\,\+\-\=\_\:\;\@\/\?\!\&^"'."'".']*)';
  2. preg_match_all('/<input type="'.$patern.'" name="'.$patern.'" value="'.$patern.'" /',$source, $daneT);


kolejny problem to, to że jeżeli tag "input" zawiera wiecej atrybutów niż 3 wcześniej wymienione (type, name, value) to wyrażenie nie kończy wybierać wartości w dobrym miejscu po atrybucie "value"


np dla źródła
  1.  
  2. <input type="hidden" name="email" value="example@domena.pl" id="2134431" date="2010-01-01" />
  3.  
  4. </form></body>

otrzymuję

type => hidden
name => email
value => example@domena.pl" id="2134431" date="2010-01-01"/>

zamiast zakończyć wybieranie wartości na międzysłowiu po adresie email

a dla źródła
  1.  
  2. <input type="hidden" name="email" value="example@domena.pl" />
  3.  
  4. </form></body>

otrzymuję

type => hidden
name => email
value => example@domena.pl

czyli jest ok



gdzie robię błąd?
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.