Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Dzielenie na zdania, Wyrażenie regularne dzialące na zdania
dmateo
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 3
Dołączył: 19.05.2009

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


Witam,

Przeglądałem tematy, jednak nie znalazłem odpowiedniego rozwiązania.

Chciałbym podzielić wypowiedź na zdania. Funkcja explode odpada, gdyż podzieli także skróty. Tj "Kiedyś tam, np. wczoraj." podzieli na dwa zdania.

W związku z tym pomyślałem, że dobre będzie przygotowanie wzorca i użycie preg_match_all. Posiadam tablice wczytana z pliku zawierającą wykaz polskich skrótów, dlatego też pomyslałem, że stworze wzorzec, który brałby pod uwagę wszystkie znaki przed kropką, chyba, że przed kropką jest jeden z elementów tablicy. Pomyślałem, że zaczne na razie od najprostszego, czyli dzielenia
na zdania na razie bez uwzględnienia skrótów.

Problem dotyczy wzorca, po napisaniu

  1. <?php
  2. $pattern ='/.*. /';
  3. ?>


Zwraca mi tablice z cala wypowiedzia, niepodzielona.

Oczywiście jeśli pomysł jest inny, nie musi to zostać w ten sposób rozwiązane.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Pregmatch sie tak dobrze nie sprawdzi.
Lepiej zrobic cos takiego
1) Rozbijasz ciag wedlug . za pomoca explode.
2) iterujesz tablice
3) dla elementu sprawdzasz czy ostatnie słowo jest skrotem, jezeli tak to element laczysz z nastepnym elementem tablicy.

Nastepny element tablicy znajdziesz za pomoca http://php.net/next
Sadze ze bedzie szybsze od preg_matcha i latwiejsze do ewentualnej modyfikacji

Ten post edytował wookieb 19.05.2009, 11:08:35
Go to the top of the page
+Quote Post
dmateo
post
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 3
Dołączył: 19.05.2009

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


Czy jest funkcja (w manualu nie znalazłem, a szukałem, bo wcześniej właśnie takie rozwiązanie brałem pod uwagę), która nie tylko usunie następny element tablicy, ale i przesunie kolejne? Tj. załata powstałe w ten sposób dziury

Bo jeśli przejde tablice foreachem, to co stanie się po połączeniu z następnym elementem? czy foreach później przejdzie do tego elementu i też będzie go sprawdzał?
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie musisz łatac.
Jeżeli używasz pętli foreach to raczej musisz elementy wrzucać do nowej tablicy.
Jeżeli używasz for to zobacz coś takiego i jaki otrzymasz efekt:
  1. <?php
  2. $arr=array(1,2,3,4,5,6);
  3. $ile=count($arr);
  4.  
  5. for($i=0; $i<$ile; $i++)
  6. {
  7.    if(isset($arr[$i]))
  8.    {
  9.        // wykonuj cos
  10.        unset($arr[$i+1]);
  11.        echo $arr[$i];
  12.    }
  13. }
  14. ?>


Teraz już będziesz wiedział, że łatanie nie jest wymagane.

Ba, jest jeszcze takie coś fajnego. Tylko tutaj musisz raczej wspomóc się dodatkową zmienna licznikiem.
  1. <?php
  2. while($el=next($arr))
  3. {
  4. // tylko elementu ktore wystepuja w tablicy
  5. }
  6. ?>


Ten post edytował wookieb 19.05.2009, 11:21:56
Go to the top of the page
+Quote Post
dmateo
post
Post #5





Grupa: Zarejestrowani
Postów: 27
Pomógł: 3
Dołączył: 19.05.2009

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


Wydaje mi się, że to wyczerpuje temat, dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.12.2025 - 13:51