Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Wyrażenia regularne(preg_match_all)
Scrooge
post
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 22.12.2006

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


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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
radeksnara
post
Post #2





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 25.08.2006

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


funkcja explode ? http://pl.php.net/explode
Go to the top of the page
+Quote Post
Babcia@Stefa
post
Post #3





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

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


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

Ten post edytował Babcia@Stefa 12.01.2007, 15:33:58


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
Scrooge
post
Post #4





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 22.12.2006

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


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!!!

Ten post edytował Scrooge 12.01.2007, 15:49:35
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: 19.08.2025 - 18:51