Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Wyrażenia regularne(preg_match_all)
Forum PHP.pl > Forum > Przedszkole
Scrooge
Chciałbym z ciągu 102,11,14,16 wyłuskać same liczby bez przecinków za pomocą preg_match_all Myślałem o czymś takim:

preg_match_all("#([0-9]{1,3})+#i",$strUser2,$wynik2,PREG_SET_ORDER) ;

ale to nie wyłapuje mi ciągu "102,11,14,16" i z tego robi zmienne tylko wyłapuje 102 robi zmienne. Przeszukuje ciąg jeszcze raz i wyłapuje 11 robi z tego zmienną przeszukuje jeszce raz i.t.d... Jak zrobić by wzorzec pasował do tego wyrażenia z przecinkami i robił z każdej liczby zmienną questionmark.gif Wiem, że gdzieś w wyrażeniu trzeba uwzględnić, że pomiędzy wyrażeniami jest przecinek ale gdzie ?
radeksnara
funkcja explode ? http://pl.php.net/explode
Babcia@Stefa
A niemorzesz użyć explode(",", $ciag)?
Lub może str_replace(",", "", $ciag)?

@radeksnara
Przepraszam, gdy pisałem mój post niebyło jeszcze twojego postu.

@edit
( Lepszy sposób ) Przykład:
Kod
<?php
$ciag = "102,11,14,16";
$ciag = str_replace(",", "&nbsp;", $ciag);
echo $ciag;
?>

Lub:
Kod
<?php
$ciag = "102,11,14,16";
$tablica = explode("," $ciag);
$count = count($tablica);
while($petla < $count)
{
$petla++;
echo '' .$tablica['' .$petla. '']. '';
}
?>


Dziękuję, Babcia@Stefa
Scrooge
Tzn kwestia jest taka, że ja piszę wyrażenie na nieco większe wyrażenie. Dla przykładu:

cos tam="sadfadasda" a cos innego="adasdad" oraz liczby="124,125,126,127"

Mogę to załatwić wzorcem
#cos tam=\"(.*?)\" a cos innego=\"(.*?)\" oraz liczby=\"([0-9]{1,3}),([0-9]{1,3}),([0-9]{1,3}),([0-9]{1,3})\"#
i wtedy jest to o co mi chodzi dokładnie!!!

Tyle, że przyznam, że to dość kłopotliwe bo gdyby tych liczb po przecinku było 20 no to można tak dopisać kolejne warunki na wyrażenie ale wtedy to się robi długie i nieestetyczne. Więc jedna opcja to użycie explode po otrzymaniu odpowiedniej zmiennej z preg_match_all dla podanego wyrażeniu:

#cos tam=\"(.*?)\" a cos innego=\"(.*?)\" oraz liczby=\"(.*?)\"#

i wtedy w zmiennej 3 miałbym właśnie ciąg liczb i przecinków. Używam $pieces = explode(" ", $zmienna3); i oczywiście osiągam to co chciałem. Moje pytanie brzmi. Czy nie można tego po prostu załatwić samym wyrażeniem regularnym tworząc odpowiedni atom i grupując to?questionmark.gif?

Bo co do $ciag = str_replace(",", "&nbsp;", $ciag) co mi to da questionmark.gif Zastąpie "," " " i jak zastosuje pierwotne wyrażenie regularne to robi się to samo. Napotyka liczbę i dopasował do wyrażenia regularnego. Zapisuje w zmiennej i rozpoczyna pracę dalej. Chodzi o to, żeby wzorzec obejmował liczba,liczba,liczba a grupował i zapisywał tylko liczba. Da się to zrobić questionmark.gif Nie używają explode bo jak już napisałęm z tym działa. Ale chodzi mi o samo wyrażenie regularne!!!
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.