Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z nawiasami
Forum PHP.pl > Forum > Przedszkole
AdamT
Mam problem a w zasadzie dwa :
Pierwszy problem to taki ze chcialbym przeszukac wyrazanie pod katem ilosci nawiasow poczatkowych '(' i kocowych ')' i chcialbym wypisac stosowny komunikat ze ilosci sa rowne

probowalem preg_match_all ale niezbyt udanie... czy mam iść dalej w tym kierunku ?

Zaczalem pisac ale chyba cos nie tak kombinowalem

Natomiast drugi problem to przy uzyciu preg_match chcialem znalezc w wyrazeniu pusty nawias (do warunku ktory mowi ze nie powinno go byc) wiec wykombinowalem sobie taki kod :

  1. <?php
  2. $zdanie = "jakies tam zdanie wpisane";
  3. $nawiasy_puste = preg_match('()',$zdanie);
  4. if ($nawiasy_puste) {
  5. echo ("Nawiasy są puste");
  6. }else{
  7. echo ("Nie ma nawiasów pustych");
  8. }
  9. ?>


i nie chce mi ten kodzik dzialac sad.gif ... czemu questionmark.gif
Radarek
Ad 1.
Lepiej uzyc jakiejs lzejszej broni smile.gif.

  1. <?php
  2. $tekst = "ewjqkewjq ( dsadsa ( dsadsa ) dsadsa";
  3.  
  4. $x = substr_count($tekst, "(");
  5. $y = substr_count($tekst, ")");
  6.  
  7. echo "x = {$x}, y = {$y}";
  8. ?>


Ad 2.

  1. <?php
  2. $tekst = "dsadsa d() ()b dd(dd)) dsa";
  3. $ile = preg_match_all("/()/", $tekst, $m);
  4.  
  5. echo $ile;
  6. ?>


Moze to dziwne, ale w tak prostym wyrazeniu popelniles przynajmniej 3 bledy:
-nie wyeskejpowales meta charow ( i )
-nie dodales ogranicznikow wyrazenia regularnego (tzn w twoim przypadku okazaly sie nimi te nawiasy, ale to przypadek)
-uzyles zlej funkcji

Cytat
preg_match() returns the number of times pattern matches. That will be either 0 times (no match) or 1 time because preg_match() will stop searching after the first match. preg_match_all()  on the contrary will continue until it reaches the end of subject. preg_match() returns FALSE if an error occurred.

Jednak w takim wypadku radzilbym isc za sugestia manuala:

Cytat
Podpowiedź:  Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster.
AdamT
SUPER DZIEKI ZA POMOC ! :-)

Juz sobie wszystko doszlifowalem ale teraz zostala najgorsza czesc zadania :/

Otoz w jednym miejscu chcialbym napisac procedure ale ona by byla w oddzielnym miejscu tylko to pozniej teraz jest taka kwestia :

nie bardzo wiem jak sobie poradzic z tym

mam wyrazenie typu

  1. <?php
  2. $tekst = "Ala ma kota"
  3. ?>


jak teraz przeszukiwac po (w zasadzie nie wiem czy literze czy grupach) miejscach na podstawie okreslonych regul:

czyli np. na miejscu a moze byc : 'spacja'a lub (a lub ~a lub Zb (Z-jakas liczba; b-druga grupa [lub litera] )

mam nadzieje ze zrozumiecie o co mi chodzi...

konkrteniej opisywalem to tutaj http://forum.php.pl/index.php?showtopic=38655&hl= ale teraz potrzebuje tylko wykonac pkt3. z tamtego reszte dzieki waszej pomocy juz zrobilem smile.gif
Radarek
Cytat(AdamT @ 2006-01-18 23:29:34)
Otoz w jednym miejscu chcialbym napisac procedure ale ona by byla w oddzielnym miejscu tylko to pozniej teraz jest taka kwestia :

Ja wiem, ze jezyk polski do latwych nie nalezy, ale chyba mozna postarac sie jasniej pisac? Szczerze mowiac, przeczytalem 2 razy twoj post i nie rozumiem nic. Wyraz sie jasniej, podaj jakies przyklady co chcesz zrobic, czego nie wiesz.
AdamT
Hmmm... tak żeczywiście nie postawiłem jednego przecinka smile.gif

1) Chcialem napisac cos takiego :

jezeli
warunek
w przeciwnym wypadku
wykonaj procedure np. nazywajaca sie "ogolna"

  1. <?php
  2. if (a=b)
  3. {
  4. echo ("Prawda");
  5. }else{
  6. procedure_ogolna(); // nie wiem czy tak mam napisac ?
  7. }
  8.  
  9. ?>


2) A ta procedura ogolna ma byc taka :
po wpisaniu wyrazenia powinien go przeanalizowac mozna powiedziec literka po literce na podstawie takich regół :

# Reguly

S->'spacja'S
S->(S
S->~(S1
S->'Z'S2
S->-S5
S1->'spacja'S1
S1->'Z'S2
S1->(S
itd... pełna gramatyka w poscie do ktorego link podalem powyzej

po analizie powinno napsiac OK lub nie zgodne z regulami czy jakos tak smile.gif

## wszystko




## Ponizej opis ppkt.2 jezeli juz wiesz o co mi chodzi, to go nie czytaj bo sie pogubisz smile.gif ##

I w sumie gdyby reguły były w stylu
S->'spacja'
S->S
S->~
.
.
.
S1->(

czyli kazdej literce odpowiada inna wartosc (ale jedna - pojedyncza)
to by chyba nie bylo problemu bo wystarczylo by zrobic jakas petle i rozbic zdanie na pojedncze skladowe a potem sprawdzic czy na odpowiednim miejscu znajduje sie odpowiedni znak

jednak w tym przypadku jest inaczej na pierwszym miejscu moze stac 1. spacja a po nim litera 2. nawias a po nim litera 3. moze stac ~ i ( i S1 .... itd

hmmmm tak zaczalem sie zastanawiac a moze by sie udalo wypisac to tak zeby jedenj literce odpowiadala dokladnie jedna literka ? hmmm

## koniec tłumaczenia - tak ja rozumiem sad.gif ale ja sie nie znam na php, pffff ja nawet nie mam na to koncepcji :/ ##

W każdym razie dzięki za pomoc
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.