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 14.06.2010, 20:28:12
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ć blinksmiley.gif
Pomóżcie...


--------------------
Ściskam prawicę...
Jacek

http://doscniewoli.pl/ - wszyscy jesteśmy niewolnikami bankierów!
http://jezusimarlena.ovh.org/
YouTube - Egzorcyzmy Anneliese Michel
Go to the top of the page
+Quote Post
Fifi209
post 14.06.2010, 20:51:32
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? haha.gif


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Blackhole
post 14.06.2010, 22:07:27
Post #3





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

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


Wątpię blinksmiley.gif
[^\s] definiuje przecież znak nie będący białym znakiem, a nie "początek ciągu lub biały znak" worriedsmiley.gif


--------------------
Ściskam prawicę...
Jacek

http://doscniewoli.pl/ - wszyscy jesteśmy niewolnikami bankierów!
http://jezusimarlena.ovh.org/
YouTube - Egzorcyzmy Anneliese Michel
Go to the top of the page
+Quote Post
Pr0100
post 14.06.2010, 22:58:16
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 15.06.2010, 07:56:32
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 sad.gif


--------------------
Ściskam prawicę...
Jacek

http://doscniewoli.pl/ - wszyscy jesteśmy niewolnikami bankierów!
http://jezusimarlena.ovh.org/
YouTube - Egzorcyzmy Anneliese Michel
Go to the top of the page
+Quote Post
Fifi209
post 15.06.2010, 08:58:10
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ę blinksmiley.gif
[^\s] definiuje przecież znak nie będący białym znakiem, a nie "początek ciągu lub biały znak" 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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Blackhole
post 15.06.2010, 18:34:06
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 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ć worriedsmiley.gif

Już wiem winksmiley.jpg

Ten post edytował Blackhole 15.06.2010, 09:37:13


--------------------
Ściskam prawicę...
Jacek

http://doscniewoli.pl/ - wszyscy jesteśmy niewolnikami bankierów!
http://jezusimarlena.ovh.org/
YouTube - Egzorcyzmy Anneliese Michel
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: 25.07.2025 - 10:06