Skocz do zawartości

Multi regexp bądź inny pomysł


MMP

Rekomendowane odpowiedzi

Noi ja wkońcu musiałem zadać pytanie bo sam sobie nie umiem poradzić.

Tworze sobie prosty system szablonów TeMMPlate noi mam zamier dołożyć do nich instrukcje warunkowe pod taką postacią:

{IF: $cos == 1 && $abc == 2}

Ale może być dowolna ilość pętli tak by można było zrobić 5,10,15... warunków, ale nie mam pomysłu by zrobić jakiegoś multi regexpa by tablica miała mniej/wiecej taką postać:

array (
	[0] => '$cos',
	[1] => '==',
	[2] => '1',
   [3] => '&',
	[...] itd
)

Co prawda może by użyc explodować cały string na spacje ale jak będzie taki warunek

{IF: $zmienna == "cos cos"}

To zostanie źle podzielone.

'Może ma ktoś pomysł jak to rozwiązać?

stopka usunieta z wpoodu wirusa na stronie docelowej

Odnośnik do komentarza
Udostępnij na innych stronach

ja to wyjasnie... a Ty napiszesz.

Pierwsze explode('"'... (cudzyslow)

po takiej operacje elementy nieparzyste tablicy będą zawierały ciągi a parzyste bądą zawierały elementy do kolejnego explode... ale po kolei.

Kolejna czynnosc to petla dla wszystkich elementow utworzonej tablicy a w niej jesli element parzysty to explode(' '... (spacja) a nieparzyste to kolejny element tablicy...

Koniec !?

<?
$ciag = '$test1 = 24 & $test2 = "cos cos" & $test3 = 485';
$wynik = array();
$tab = explode('"',$ciag);
for ($x=0;$x <= count($tab);$x++) {
if ($x/2 == intval($x/2)) {
	$tab2 = explode(' ',$tab[$x]);
	#dopisz do tablicy $wynik całą zawartosc $tab2
} else {
	#dopisz do tablicy $wynik zawartosc $tab[$x]
}
}
?>

uzupełnij miejsce opisów (#)... nie byłem pewien jak to zapisać.

Odnośnik do komentarza
Udostępnij na innych stronach

MMP - jak będziesz w moim wieku określenie geniusz zupełnie nie bedzie na Tobie robiło wrażenia... dlatego, że Ty nim już jesteś.

p.s. Oczywiescie wielkie umysly :D popełniają błędy. Zrobiłem drobną ale jakże istotną poprawkę do przykładowego skryptu...

Pokażesz jak to Ty rozpisałeś !?

Odnośnik do komentarza
Udostępnij na innych stronach

$ciag = '$test1 = 24 & $test2 = "cos cos" & $test3 = 485 || $test4 = "abc" && ( $code == "abc kot" || $zupa == null )';
$wynik = array();
$tab = explode('"',$ciag);
for ($x=0, $cnt = count($tab);$x < $cnt;$x++) 
{
if ($x%2) 
{
	$wynik[] = $tab[$x];
} 
else 
{
	$tab2 = explode(' ',$tab[$x]);
	$wynik[] = $tab2;
}
}
foreach( $wynik as $val )
{
if( is_array($val))
{
	foreach( $val as $v2 )
	{
		$xa[] = $v2;
	}
}
else
{
	$xa[] = '"'.$val.'"';
}
}

Takie cośik zrobiłem, noi w każdym elemencie tablicy mam odpowiednią część instrukcji :D

stopka usunieta z wpoodu wirusa na stronie docelowej

Odnośnik do komentarza
Udostępnij na innych stronach

No widzisz... miast sprawdzać liczbę parzystą poprzez wykonanie 3 obliczeń i porownania (moj przyklad) wystarczyło reszte z dzielenia sprawdzic (Twoj przyklad)... poza tym ja wielokrotnie wyliczałem count() w pętli a Ty tylko raz !...i to jest właśnie to o czym pisalem w poprzedniej wypowiedzi.... geniuszu.

Mam nadzije, ze działa skutecznie.

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności