Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [regexp] Jak określić?, początek tekstu lub biały znak
Blackhole
post
Post #1





Grupa: Zarejestrowani
Postów: 283
Pomógł: 1
Dołączył: 15.11.2004
Skąd: Mikołów

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


Hej!
Chciałbym z tekstu wyciągnąć wszystkie wyrazy długości od 2 do 3 znaków. Mam aktualnie tak:
  1. <?
  2. preg_match_all("#\s([0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{2,3})\s#Usi", $txt, $sh);
  3. ?>
Jednak nie wyciąga to wyrazów, które są na początku lub końcu tekstu. I tu mam problem, bo nie wiem, jak to zdefiniować (IMG:style_emoticons/default/blinksmiley.gif)
Pomóżcie...
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


  1. <?php
  2.  
  3. $s = 'to jest jakis tek st as sdfs sdf się';
  4.  
  5. $reg = '#([^\s]{2,3})#';
  6.  
  7. preg_match_all($reg, $s, $matches);
  8.  
  9. echo '<pre>';
  10. print_r($matches);
  11.  
  12. ?>


Może tak? (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
Blackhole
post
Post #3





Grupa: Zarejestrowani
Postów: 283
Pomógł: 1
Dołączył: 15.11.2004
Skąd: Mikołów

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


Wątpię (IMG:style_emoticons/default/blinksmiley.gif)
[^\s] definiuje przecież znak nie będący białym znakiem, a nie "początek ciągu lub biały znak" (IMG:style_emoticons/default/worriedsmiley.gif)
Go to the top of the page
+Quote Post
Pr0100
post
Post #4





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

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


http://pl2.php.net/manual/en/regexp.reference.backslash.php

\A i \Z
Go to the top of the page
+Quote Post
Blackhole
post
Post #5





Grupa: Zarejestrowani
Postów: 283
Pomógł: 1
Dołączył: 15.11.2004
Skąd: Mikołów

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


Pr0100, spróbowałem więc tak:
  1. function x2words_($txt, $dl) {
  2. echo "<b>com:</b> ".$txt."<br />";
  3. // zwraca ciag ze zdwojonymi slowami dlugosci d: 1<d<=$dl
  4. preg_match_all("#[\s\A]([0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{2,".$dl."})[\s\Z]#Usi", $txt, $sh); // wyciagnij krotkie wyrazy
  5. echo '<pre>'; print_r($sh); echo '</pre>';
  6. $sh = $sh[1];
  7. for ($si=0; $si<count($sh); $si++) // zdubluj znalezione krótkie wyrazy
  8. $sh[$si] .= $sh[$si];
  9. $out = implode(" ", $sh); // zrób z nich string
  10. echo "<b>out:</b> ".$out;
  11. return $out;
  12. }
  13. $txt = 'To je string nie tak mały i do testów - tfu';
  14. echo $str."<br />".x2words_($str,3);
i otrzymuję:
Cytat
com: To je string nie tak mały i do testów - tfu

Array
(
[0] => Array
(
[0] => je
[1] => nie
[2] => ały
[3] => do
)

[1] => Array
(
[0] => je
[1] => nie
[2] => ły
[3] => do
)

)

out: jeje nienie łyły dodo
To je string nie tak mały i do testów - tfu
jeje nienie łyły dodo

Spróbowałem też dać \b zamiast tych \A i \Z, ale wynik jest taki:
Cytat
com: To je string nie tak mały i do testów - tfu

Array
(
[0] => Array
(
[0] => je
[1] => nie
[2] => do
)

[1] => Array
(
[0] => je
[1] => nie
[2] => do
)

)

out: jeje nienie dodo
To je string nie tak mały i do testów - tfu
jeje nienie dodo

Czyli nie działa (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(Blackhole @ 14.06.2010, 23:07:27 ) *
Wątpię (IMG:style_emoticons/default/blinksmiley.gif)
[^\s] definiuje przecież znak nie będący białym znakiem, a nie "początek ciągu lub biały znak" (IMG:style_emoticons/default/worriedsmiley.gif)


To nie rozumiem...może opisz dokładnie

Początek ^ koniec $ wystarczy poczytać...
http://pl.php.net/manual/pl/regexp.reference.circudollar.php
Go to the top of the page
+Quote Post
Blackhole
post
Post #7





Grupa: Zarejestrowani
Postów: 283
Pomógł: 1
Dołączył: 15.11.2004
Skąd: Mikołów

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


fifi209, dałem:
  1. preg_match_all("#(\s|^)([0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]{2,".$dl."})(\s|$)#Usi", $txt, $sh); // wyciagnij krotkie wyrazy
  2. echo '<pre>'; print_r($sh); echo '</pre>';
  3. $sh = $sh[2];
i zadziałało (IMG:style_emoticons/default/smile.gif)
Mam jeszcze problem, jeśli krótkie słowa występują koło siebie, bo wtedy "wyciągane" są tylko nieparzyste, gdyż końcowy biały znak "zabrany" w matchowaniu nieparzystego wyrazu nie jest już odnajdywany w parzystym, który jest tuż za nim. Rozumiem, dlaczego się tak dzieje, ale nie wiem, jak temu przeciwdziałać (IMG:style_emoticons/default/worriedsmiley.gif)

Już wiem (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował Blackhole 15.06.2010, 09:37:13
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: 25.08.2025 - 19:44