Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wyszukiwanie wyrazów krótszych niż n znaków
czachor
post 31.01.2008, 17:55:58
Post #1





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


Witam,
niestety nie jestem za mocny w wyrażeniach regularnych no i mam wydaje się banalny problem. Próbuję znaleźć w ciągu wyrazy krótsze niż 4 znaki i usunąć je z ciągu... Próbuję tego:
  1. <?php
  2. $str = 'abc defg hi j kllmno prs';
  3. print_r(preg_replace('/ w{1,3} /', ' ', $str)); //zwraca: abc defg j kllmno prs
  4. ?>

Coś jest nie tak... Jakby ktoś coś podpowiedział, będę wdzięczny!


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
Grzyw
post 31.01.2008, 18:51:51
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 75
Dołączył: 19.08.2004
Skąd: Wrocław

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


A ja bym ominął regularne:
  1. <?php
  2. $str = 'abc defg hi j kllmno prs';
  3. $tablica = explode(' ',$str);
  4. foreach ($tablica as $key => $element)
  5. {
  6. if (strlen($element)>3) $tablicaNew[]=$element;
  7. }
  8.  
  9. $strNew = impolode(' ',$tablicaNew);
  10. ?>


--------------------
Idąc po czyichś śladach, nie zajdziesz ani kroku dalej...
Go to the top of the page
+Quote Post
nevt
post 31.01.2008, 19:04:49
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


to działa:
$str = 'abc defg hi j kllmno prs';
echo "1. ($str)<br />";
$str = preg_replace('/^|\s/', ' \_0 ', $str); ('backslash zero spacja'- wywalić podkreślenie)
$str = preg_replace('/(\s)(\S){1,3}(\s)/', '', $str);
$str = preg_replace('/(^|\s)\s/', '\1', $str);
echo "2. ($str)";

Edit1: poprawka dla powtarzających się sekwencji (dlatego zostawało j...)
Edit2: zmiana znaczników z php na code
Edit3: zmiana nie pomogła - w ogóle wywalam znaczniki...
Edit4: zmiana nie pomogła dalej nie wyświetla sekwencji \_0 (backslash zero - wywalić podkreślenie)
Edit5: Ten edytor jest do dupy, to już któryś raz kiedy nie pozwala mi przedstawić poprawnego składniowo kodu PHP...

Ten post edytował nospor 1.02.2008, 08:39:44


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
czachor
post 31.01.2008, 22:05:14
Post #4





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


Hm jednak jeszcze nie do końca... Zobacz, że zostaje "j"... usuwa spację sprzed niego, ale zostawia... A zobacz, co się dzieje, jak będzie tam jeszcze jeden znak pojedynczy: $str = 'abc defg hi j kllmno X prs'; Zwróci: 'defgj kllmnoprs' :/

--edit
O, ekstra, dzięki. Działa jak trzeba, zaraz dokładnie sobie przeanalizuję całość.
@Grzyw - wiem, że można to explodem potraktować, ale od tego są właśnie wyrażenia regularne smile.gif

--edit2
Hm, prawie działa... nie wycina znaków na końcu ciągu... :/


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
Tubis
post 1.02.2008, 08:47:33
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 2
Dołączył: 27.03.2007
Skąd: Sufczyn

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


Tak bo z tego co widzę to to wyrażenie zamienia znaki kończące się jakimkolwiek odstępem. Także jeśli po znakach nie będzie spacji, tabulatora lub entera to nie zadziała
Go to the top of the page
+Quote Post
nevt
post 1.02.2008, 09:04:12
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


to już chyba ostatnia korekta, podmień czwartą linjkę na:
  1. <?php
  2. ...
  3. $str = preg_replace('/(s)(S){1,3}(s|$)/', '', $str);
  4. ...
  5. ?>


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
czachor
post 1.02.2008, 10:53:26
Post #7





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


W tej chwili zostawia tylko spacje na początku i na końcu, ale to narazie sobie potraktuję trim()-em, a potem dorzucę to do regexpa. Dzięki wielkie!


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
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: 24.07.2025 - 21:48