Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
daris
Jak zrobić tak aby w danym kodzie html za pomocą wyrażeń regularnych wyłapać wszystkie wystąpienia <input type=button value=cos_tam> i dodać do tablicy to cos_tam?

Np jak mam taki kod:
  1. <input type=button value=test><input type=button value=test3>

To chciałbym otrzymać coś takiego:
Kod
Array
(
    [0] => test
    [1] => test3
)


Udało mi się to zrobić narazie tylko takim wyrażeniem:
Kod
#\<input (.*)type=button(.*)value=test\>(.*)>#s

ale co mi po tym jak nie do końca działa tak jak powinno czyli może pasować np taki kod:
Kod
<input type=button>fds value=test dsfsdfs<input type=button value=test>


Jak to zawęzić?
qrees
Cytat(daris @ 22.01.2008, 15:05:06 ) *
Jak zrobić tak aby w danym kodzie html za pomocą wyrażeń regularnych wyłapać wszystkie wystąpienia <input type=button value=cos_tam> i dodać do tablicy to cos_tam?

Np jak mam taki kod:
  1. <input type=button value=test><input type=button value=test3>

To chciałbym otrzymać coś takiego:
Kod
Array
   (
       [0] => test
       [1] => test3
   )


Udało mi się to zrobić narazie tylko takim wyrażeniem:
Kod
#\<input (.*)type=button(.*)value=test\>(.*)>#s

ale co mi po tym jak nie do końca działa tak jak powinno czyli może pasować np taki kod:
Kod
<input type=button>fds value=test dsfsdfs<input type=button value=test>


Jak to zawęzić?

Kod
#\<input[^>]*value=(\w*)[^>]*>\#s

A jeżeli poprawisz wygląd tego inputa, żeby było value="test" zamiast value=test:
Kod
#\<input[^>]*value="([^"]*)"[^>]*\>#s

Nie sprawdzałem czy działa, ale trick polega na użyciu [^>], który pasuje do każdego znaku poza >.
Gacek89
Witam, niechce zakładać nowego tematu bo pytanie podobne.
Chce znalesc wszystke wyrazenia reguralne tego typu
Kod
href="http://www.costamcostam.pl/profil/[b]*[/b]/"


*-wsztkie znaki one własnie mnie interesuja, nieznam sie na wyrażeniach regularnych ledwo co umiem jes stosować 
qrees
Cytat(Gacek89 @ 23.01.2008, 00:45:00 ) *
Witam, niechce zakładać nowego tematu bo pytanie podobne.
Chce znalesc wszystke wyrazenia reguralne tego typu
Kod
href="http://www.costamcostam.pl/profil/[b]*[/b]/"


*-wsztkie znaki one własnie mnie interesuja, nieznam sie na wyrażeniach regularnych ledwo co umiem jes stosować


W takim razie pewnie zainteresuje cię strona:
http://www.php.net/manual/en/reference.pcr...tern.syntax.php
W skrócie powiem, że . odpowiada dowolnemu znakowi, a * dowolnej ilości poprzedniuego znaku. Czyli dowolny ciąg znaków to .* .
Gacek89
ja wiem co oznacza * daltego go urzyłem
lecz sam poprawnego zapytani niumiem stworzyc, zrobiłem takie coś:
Kod
/^(http:\/\/www.fotka.pl\/profil\/\/)$/

ale niedziała zwraca pusta tabele z 2lub 3 polami a takich wyrazen w strignu jest z 20.
qrees
Cytat(Gacek89 @ 23.01.2008, 12:06:37 ) *
ja wiem co oznacza * daltego go urzyłem
lecz sam poprawnego zapytani niumiem stworzyc, zrobiłem takie coś:
Kod
/^(http:\/\/www.fotka.pl\/profil\/\/)$/

ale niedziała zwraca pusta tabele z 2lub 3 polami a takich wyrazen w strignu jest z 20.

^ oznacza początek tekstu (albo linii) a $ jego koniec. Więc jeżeli w tekście nie ma dokładnie takiej linii:
Kod
http://www.fotka.pl/profil//

To nic nie dostaniesz.
iron77
witam
mam pewne dosc amatorskie pytanie w kwestii wyrazen regularnych, ktorego rozwiazanie komus obeznanemu w temacie zajmie, mam nadzieje, chwile smile.gif

w skrocie o co chodzi:

mam pewien string, gdzies w nim jest htmlowy komentarz <!-- element -->
filtruje go poprzez
Kod
$string = str_replace('<!-- element -->', drawElement(), $string);


problem pojawia sie jednak, kiedy chce zamienic jakis element z zawartym wewnatrz agumentem, np. <!-- pokaz element 5 --> , tak aby zamienic taki comment na drawElement(5);

podejrzewam, ze wystarczy tu jakies niezbyt skomplikowane wyrazenie regularne, jesli ktos moglby pomoc to bylo by spoko
nowotny
drawElement() to jest twoja własna, phpowa funkcja czy to ma być string na który zamieniasz...?
iron77
moja funkcja
nowotny
Aż takie proste to to nie jest... tongue.gif
  1. <?php
  2. $string='asdfsd fa sdf asdf <!-- pokaz element 5 --> asdf asdf <!-- element --> asdf <!-- element --> asdf sdf <!-- pokaz element 5 --> asf asd f as';
  3.  
  4. echo preg_replace_callback('#<!--.+element ([^ ]+|)[ ]?-->#U','clbk',$string);
  5.  
  6. function clbk($array){
  7. if($array[1]=='') return drawElement();
  8. else return drawElement($array[1]);
  9. }
  10. ?>
iron77
ok dzieki smile.gif zaraz sprawdzam jak podziala w moim przypadku

dziekowka -jest ok
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.