Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Regex, 3 dowlne znaki i spacja
Forum PHP.pl > Forum > PHP
biedak
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
krowal
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'
biedak
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ą.
wookieb
Kod
/(\w{1,3})\s/

Z replace-em już chyba dasz radę.
biedak
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.
wookieb
Móoj błąd
Kod
/\s(\w{1,3})\s/
biedak
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
wookieb
To już szybciej i wygodniej będzie Ci po prostu wybrać te dobry wyrazy za pomocą preg_match.
biedak
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ą
wookieb
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|$)/
pmir13
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?
biedak
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.
pmir13
  1. $pattern = "/\b\w{4,}\b/";
wookieb
A więc zróbmy prościej
Kod
/(\w{4,})/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.