![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 22.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Mam kolejny problem (IMG:style_emoticons/default/smile.gif) Mianowicie program działa tak, że analizuje znak po znaku w stringu i w zależności od niego wykonuje dodatkowe operacje. Mam jednak problem. W owym stringu są też operacje na spacjach pomiędzy wyrazami. Problem w tym, że chciałbym by jeśli dany fragment jest w cudzysłowiu to żeby wyświetlał go normalnie i olał znaki wewnątrz. np.
Normalnie: $str='Ala "baba dada"' efekt aktualny: Ala baba dada Chciałbym by działało tak: Ala baba dada Ten post edytował JPCannon 31.05.2013, 07:56:05 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
pisane z palca, ale mniej więcej tak to powinno być. Ten post edytował !*! 31.05.2013, 08:25:29 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 22.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Niestety jak zwykle mam problem z angielskim tłumaczeniem działania funkcji. Zmienna $mathes powinna być jakoś zadeklarowana albo zamieniona na jakąś wartość?
Niestety nie działa jeśli dam w ten sposób: <?php $str='Ala "baba dada"'; $tablica= str_split($str); $n=strlen($str); for($i=0;$i<$n;$i++){ preg_match('/([A-Za-z]+)\s\"([a-z\s]+)\"/', $str, $match); echo $tablica[$i]; if($tablica[$i]==" "){ echo ("</br>"); } } ?> Nadal rozdziela normalnie po spacjach. Jakieś rady? Ten post edytował JPCannon 31.05.2013, 09:36:44 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 110 Dołączył: 18.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Gdzie tutaj masz zmienna $mathes (IMG:style_emoticons/default/smile.gif)
Pierwszy i drugi element tablicy $match to Twoje wyciągnięte elementy (IMG:style_emoticons/default/smile.gif) Lub mnie poprawnie ale efekt uzyskasz (nie umiem wyrażeń regularnych ;/ )
Ten post edytował Arcioch 31.05.2013, 09:45:53 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 22.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Pomyliłem się w nazwie (IMG:style_emoticons/default/wink.gif) Niestety nawet jak skopiowałem kod to jedyne co się zmieniło to brak wyświetlania ". Poza tym nadal rozdziela string po spacjach. Mi zaś zależy by rozdzielał string po spacjach ale tylko poza cudzysłowem. Zdania w cudzysłowiu chciałbym aby były wyświetlane w całości.
PS. Z tego co wyczytałem z kodu powyżej to zamieniłeś " na znak pusty i kazałeś podzielić zdanie po odstępach pomiędzy słowami. Tak więc jak pisałem nie jest to ani trochę to o co mi chodziło (IMG:style_emoticons/default/wink.gif) Ma traktować odstęp pomiędzy wyrazami w cudzysłowiach jako wyjątek i ich nie rozdzielać. Ten post edytował JPCannon 31.05.2013, 10:43:09 |
|
|
-Gość- |
![]()
Post
#6
|
Goście ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 22.05.2013 Ostrzeżenie: (0%) ![]() ![]() |
Teraz działa poprawnie. Pozostał mi jeszcze jeden problem użycia tego kodu. Program który robię analizuje stringa znak po znaku i tak musi zostać. Robię to z użyciem zwykłego str_split. Jest jakiś sposób, żeby od wystąpienia " przerywał rozdzielanie na pojedyncze znaki, albo potraktował wszystko pomiędzy " " jako jeden element takiej tablicy? W Przypadku przerwania przy cudzysłowiu, chciałbym wznowić proces rozkładania ponownie potem. Możecie coś podpowiedzieć?
Zastanawiam się nad takim rozwiązaniem, ale nie wiem jak przetłumaczyć to na kod: -Jeżeli trafisz w zdaniu na " to: polecenia -Jeżeli trafisz w zdaniu na " drugi raz to: polecenia Z tym, że sekwencja ta musiała by się resetować po wystąpieniu drugi raz tego znaku. Same polecenia wewnątrz to już nie problem, ale nie wiem jak kazać mu zrobić co innego gdy trafi na dany znak drugi raz, a do tego tak by potem odliczał od nowa. Rozwiązałem już problem (IMG:style_emoticons/default/smile.gif) używając prostych ifów. Zwyczajnie nadałem dwa warunki. Jeśli program trafił na znak " to miał ustawić stan true, jeśli potem trafił na " to miał zmienić true na false i wzajemnie. Potem dodałem tylko warunek przy części rodzielającej po spacji, że warunkiem do wykonania entera jest nie tylko spacja ale też zmienna na false. Dwa ify nic poza tym (IMG:style_emoticons/default/wink.gif) if(tablica[i]=="\"" && cudz==false){ cudz=true; } else if(tablica[i]=="\"" && cudz==true){ cudz=false; } Dziękuję wszystkim za pomoc (IMG:style_emoticons/default/wink.gif) Ten post edytował JPCannon 31.05.2013, 15:20:18 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 21:45 |