Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Regex, 3 dowlne znaki i spacja
biedak
post 6.05.2011, 06:45:16
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.05.2011

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


cześć,

próbuje zaminić w stringu każdy ciąg znaków o długosci 1-3 zawsze zakończony spacją na powiedzmy "|".
Próbowałem juz pare sposobów, aktualnie:
$pattern = "/.{1,2,3}\s/";
$matches = preg_replace($pattern, "|", "jeden dwa trzy cztery pds g aa");

Nie działają.
Pozdrawiam
Go to the top of the page
+Quote Post
krowal
post 6.05.2011, 08:01:09
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


A co to za wymysł: {1,2,3} ? w nawiasach klamrowych podaje się zakres 'od do' a nie możliwe ilości znaków. Powinno być tak: '.{1,3}\s'


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
biedak
post 6.05.2011, 10:12:34
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.05.2011

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


Nie działa,
Przy twoim jest błąd:
No ending delimiter '.' found

po zmianie na "/.{1,3}\s/"
działa źle, dostaje:
je||t|czt|||aa

a całych wyrazów ma nie ruszać, tylko wyrazy o długości 1-3 znaków zakończone spacją.
Go to the top of the page
+Quote Post
wookieb
post 6.05.2011, 10:16:15
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Kod
/(\w{1,3})\s/

Z replace-em już chyba dasz radę.


--------------------
Go to the top of the page
+Quote Post
biedak
post 6.05.2011, 10:24:31
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.05.2011

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


Nie działa, efekt nadal taki sam:
je||t|czt|||aa

skraca nawet słowo "jeden". Chodzi tylko usunięcie krótkich słów - 1-3 znakowych zakończonych spacją. Długie słowa powinny zostać bez zmian.

Ten post edytował biedak 6.05.2011, 10:26:14
Go to the top of the page
+Quote Post
wookieb
post 6.05.2011, 10:26:20
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Móoj błąd
Kod
/\s(\w{1,3})\s/


--------------------
Go to the top of the page
+Quote Post
biedak
post 6.05.2011, 10:38:02
Post #7





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.05.2011

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


Efekt:
jeden|trzy cztery|g aa

  1. $matches = preg_replace("/\s(\w{1,3})\s/", "|", 'jeden dwa trzy cztery pds g aa');
  2. print $matches;


Potrzebowałbym:
jeden|trzy|cztery|

Żeby nie było, to też próbuje i jakieś bzdety dostaje
Go to the top of the page
+Quote Post
wookieb
post 6.05.2011, 10:49:59
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To już szybciej i wygodniej będzie Ci po prostu wybrać te dobry wyrazy za pomocą preg_match.


--------------------
Go to the top of the page
+Quote Post
biedak
post 6.05.2011, 11:06:35
Post #9





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.05.2011

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


Fakt, to pewnie będzie lepsze.
Kombinuje tak:
  1. $subject= "jeden dwa trzy cztery pds g aa";
  2. $pattern = "/...*\s/";
  3. preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
  4. print_r($matches);


ale nie działa

Chodzi o słowa o dlugości >3 zakończone spacją

Ten post edytował biedak 6.05.2011, 11:07:01
Go to the top of the page
+Quote Post
wookieb
post 6.05.2011, 11:13:17
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Naucz się w końcu wyrażeń regularnych bo Twój aktualny poziom wiedzy na ich temat to chyba wstęp od autora
Kod
/(?:\s|^)(\w{3,})(?:\s|$)/


--------------------
Go to the top of the page
+Quote Post
pmir13
post 6.05.2011, 11:22:01
Post #11





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


A może podaj jakiś poprawny przykład, albo sprecyzuj co chcesz osiągnąć, bo w zamianie:
"jeden dwa trzy cztery pds g aa"
na
"jeden|trzy|cztery|"
to ja nie widzę nic wspólnego ze zdaniem
Cytat
próbuje zaminić w stringu każdy ciąg znaków o długosci 1-3 zawsze zakończony spacją na powiedzmy "|"

Dlaczego w takim razie tylko jedna kreska na końcu? I skąd kreska między trzy i cztery?
Go to the top of the page
+Quote Post
biedak
post 6.05.2011, 11:42:44
Post #12





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 6.05.2011

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


Cytat(wookieb @ 6.05.2011, 12:13:17 ) *
Naucz się w końcu wyrażeń regularnych bo Twój aktualny poziom wiedzy na ich temat to chyba wstęp od autora
Kod
/(?:\s|^)(\w{3,})(?:\s|$)/


No może i tak, ale twoje dalej nie daje właściwych rezultatów (wyrazy dłuższe niż 3 znaki)
  1. $subject= "jeden dwa trzy cztery pds g aa";
  2. $pattern = "/(?:\s|^)(\w{3,})(?:\s|$)/";
  3. preg_match_all($pattern, $subject, $matches, PREG_PATTERN_ORDER);
  4. print_r($matches);


daje: Array: jeden trzy pds

Cytat(pmir13 @ 6.05.2011, 12:22:01 ) *
A może podaj jakiś poprawny przykład, albo sprecyzuj co chcesz osiągnąć, bo w zamianie:
"jeden dwa trzy cztery pds g aa"
na
"jeden|trzy|cztery|"
to ja nie widzę nic wspólnego ze zdaniem

Dlaczego w takim razie tylko jedna kreska na końcu? I skąd kreska między trzy i cztery?


Dla przykładu dałem, chciałem aby wyrazy były oddzielone. Ale teraz inna koncepcja - chcę wyciągnąć wyrazy dłuższe niż 3 znaki.
Go to the top of the page
+Quote Post
pmir13
post 6.05.2011, 11:48:05
Post #13





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


  1. $pattern = "/\b\w{4,}\b/";
Go to the top of the page
+Quote Post
wookieb
post 6.05.2011, 11:49:38
Post #14





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A więc zróbmy prościej
Kod
/(\w{4,})/


--------------------
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: 31.05.2025 - 00:41