Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dzielenie dlugich zdan na mniejsze porcje, (REGEX)
kalu111
post 12.08.2007, 17:30:31
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 22.07.2006

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


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?
Go to the top of the page
+Quote Post
domis86
post 12.08.2007, 17:58:00
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


olej regexpa - zastosuj klasyczne proceduralne rozwiazanie
Czasami mysle ze regexpy zostaly stworzone aby utrudnic ludziom zycie blinksmiley.gif
Go to the top of the page
+Quote Post
Hacker
post 12.08.2007, 19:01:57
Post #3





Grupa: Zarejestrowani
Postów: 225
Pomógł: 0
Dołączył: 1.11.2005

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


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. ?>


Ten post edytował Hacker 12.08.2007, 19:11:53


--------------------
(\.../)This is Bunny
(O.o)Copy Bunny into your signature to help him...
(> <)...on his way to world domination
Go to the top of the page
+Quote Post
Kicok
post 12.08.2007, 19:07:48
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  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


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
kalu111
post 12.08.2007, 21:12:32
Post #5





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 22.07.2006

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


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. ?>


Ten post edytował kalu111 13.08.2007, 11:27:30
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 20:51