Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: Dzielenie dlugich zdan na mniejsze porcje
Forum PHP.pl > Forum > PHP
kalu111
Interesuje mnie podzial dlugiego zdania na kilka mniejszych porcji o okreslonej dlugosci przy pomocy tylko jednego wyrazenia regularnego, przy czym wyrazy nie moge byc lamane.
  1. <?php
  2. preg_match_all('/[[:alnum:][:punct:][:blank:]]{1,20}(?=b)/', 'Jakis dlugi tekst', $aFound)
  3. ?>
Na poczatku wszystko pieknie dziala, ale gdy damy wyraz, ktory w tym przypadku ma wiecej niz 20 znaków zostanie on skrocony i nie podzieli sie prawidlowo. I druga sprawa, nie wiem czemu ostatni znak interpunkcyjny badz znak specjalny nie jest brany pod uwage jezeli bedzie bezposrednio za ostatnim wyrazem. Czy ma ktos jaks lepsza koncepcje?
domis86
olej regexpa - zastosuj klasyczne proceduralne rozwiazanie
Czasami mysle ze regexpy zostaly stworzone aby utrudnic ludziom zycie blinksmiley.gif
Hacker
Proszę bardzo (sprawdzone działa)
  1. <?php
  2. preg_match_all('/[[:alnum:][:punct:][:blank:]]{1,20}([b]|S+)/', 'Jakis dlugi, tekst i, baaaaaaaaaaaaaaaarrrrrrrrrrrrdzzzzzzzzzzzzzo, dlugie słowo.', $aFound);
  3. ?>
Kicok
  1. <?php
  2.  
  3. $tekst = 'aaa, aaa, aaa, aaaa, aa, aaaa. aa! aaaaa,aaa aaa aa, aaaa
  4. fdfds dsd, dsf
  5. awl, abcbabcbabcbabcbabcbabcbabcbabcbabcbabcbabcbabcbabcbabcbabcbabcbabcba. dsf,
     dsf dsf'
    ;
  6.  
  7. preg_match_all( '/(?:[[:alnum:][:punct:][:blank:]]{1,20}(?=b)[[:punct:][:blank:]]*|[[:alnum:]]+[[:blank:][:punct:]]+)/', $tekst, $matches );
  8. echo '<pre>' . print_r( $matches, true ) . '</pre>';
  9.  
  10. ?>


1. \\b, czyli pocz±tek/koniec wyrazu, jest umieszczony zaraz przed pierwszym/po ostatnim znaku alfanumerycznym wyrazu, a nie zaraz po znaku interpunkcyjnym znajduj±cym siê za tym wyrazem. Dlatego zaraz po "przewidywaniu" nale¿a³o jeszcze umie¶ciæ klasê znaków interpunkcyjnych oraz znaków bia³ych.
2. Do mojego wyra¿enia doda³em alternacjê. Je¶li pierwsza czê¶æ (czyli nieco przerobione twoje wyra¿enie) nie zostanie dopasowana, to mechanizm wyra¿eñ spróbuje dopasowaæ drug± czê¶æ, która wy³apie d³u¿sze wyrazy.



Cytat("domis86")
olej regexpa (...)
Czasami mysle ze regexpy zostaly stworzone aby utrudnic ludziom zycie blinksmiley.gif

smile.gif
kalu111
Ok, wielkie, dzieki, tego wlasnie oczekiwalem !
biggrin.gif
zmodyfikowalem na dodatek wyrazenie o to, aby lamalo za dlugie wyrazy winksmiley.jpg
  1. <?php
  2. preg_match_all('(?:[[:alnum:][:punct:][:blank:]]{1,20}(?=b)(?:(?:[[:punct:][:blank:]]*)|(?:[[:alnum:]]+[[:blank:][:punct:]]+))|(?:[[:alnum:][:punct:][:blank:]]{20}))/', 'Jakis dlugi tekst i dlugi wyrazzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz', $aFound);
  3. ?>
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.