Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne - jeden lub dwa wyrazy
Forum PHP.pl > Forum > PHP
gregiolo
Witam serdecznie,

W jaki sposób uzyskać wyrażenie regularne okre¶laj±ce dopuszczalne użycie w stringu:
- jednego LUB dwóch wyrazów oddzielonych spacj± o minimalnej długo¶ci znaków 3?

To udało mi się uzyskać dla pojedyńczego wyrazu:
/^[0-9a-zA-Z±ćęłńó¶Ľż]{3,}$/D

Nie wiem jak umiejscowić w tym jedn± spację w założeniu LUB. ;/

Pozdrawiam.
m_i_n
Czemu na tym forum jest tak zwalony edyto postów że nie można nic w ¶rodku poprawic? Chciałęm przekopiować Twój kod i dodać co¶ a tu zonk :\ Ogółem musisz to zrobić tak: ^([a-z]{3, } ){3, } ?$
wookieb
Kod
preg_match('/^(\w+)( {3,}\w+)?$/', $str, $matches);
print_r($matches);


\w+ zamien sobie na twoje [0-9a-zA-Z±ćęłńó¶Ľż]{3,}
pyro
@wookieb, Twoje wyrażenie wydaje się być błędne:

(\w+)//`w` 1 lub więcej//( {3,}// 3 lub więcej spacji //\w+//`w` 1 lub więcej//)?


bardziej powinno być tak:

Kod
/^[0-9a-z±ćęłńó¶Ľż]{3,}( [0-9a-z±ćęłńó¶Ľż]{3,})?$/i
wookieb
Cytat(pyro @ 3.02.2010, 11:06:58 ) *
@wookieb, Twoje wyrażenie wydaje się być błędne:
(\w+)//`w` 1 lub więcej//( {3,}// 3 lub więcej spacji //\w+//`w` 1 lub więcej//)?


Cytat(wookieb @ 3.02.2010, 11:00:22 ) *
\w+ zamien sobie na twoje [0-9a-zA-Z±ćęłńó¶Ľż]{3,}


Poza tym dowiedz się proszę co oznacza \w
pyro
Bardziej chodziło mi o hint ze spacjami. Wyrażenie napisane przez Ciebie wydaje się tylko akceptować tekst, gdy tylko ma on ich 3 lub więcej

Cytat(wookieb @ 3.02.2010, 11:14:40 ) *
Poza tym dowiedz się proszę co oznacza \w


Po to dałem 'w' w apostrofy, bo nie chciało mi się pisać 'zbiór znaków [a-zA-Z0-9_]'

\w == [a-zA-Z0-9_]
wookieb
Cytat(gregiolo @ 3.02.2010, 10:50:35 ) *
- jednego LUB dwóch wyrazów oddzielonych spacj± o minimalnej długo¶ci znaków 3?

Czyli:
wyraz
wyraz(minimum 3 spacje)wyraz


Cytat(pyro @ 3.02.2010, 11:20:08 ) *
Wyrażenie napisane przez Ciebie wydaje się tylko akceptować tekst, gdy tylko ma on ich 3 lub więcej

Nie snitch.gif

A u mnie jest:
wyraz
wyraz(minimum 3 spacje)wyraz
Chyba, że czego¶ nie zrozumiałem tongue.gif

Cytat
Po to dałem 'w' w apostrofy, bo nie chciało mi się pisać 'zbiór znaków [a-zA-Z0-9_]'

Wybaczam snitch.gif
pyro
Cytat(wookieb @ 3.02.2010, 11:23:44 ) *
A u mnie jest:
wyraz
wyraz(minimum 3 spacje)wyraz
Chyba, że czego¶ nie zrozumiałem tongue.gif


Wła¶nie wydaje mi się, że autorowi tematu chodziło o to, że wzorzec ma akceptować ci±g składaj±cy się z dwóch członów (je¶li jest spacja) po [a-zA-Z0-9]{3,}, rozdzielona jedn± spacj±.

// edit

Chociaż rzeczywi¶cie autora można dwuznacznie zrozumieć. Ma podane obydwa rozwi±zania. Niech teraz sobie wybierze. smile.gif
wookieb
Autor zweryfikuje snitch.gif
gregiolo
Witam,
Dziekuje za zaangażowanie, dopiero dzi¶ byłem w stanie odczytać post. Rzeczywi¶cie można to było zrozumieć dwuznacznie.

Chodziło mi o jeden lub dwa wyrazy. Jeżeli istniałyby dwa, to powinne być oddzialone pojedyncz± spacj±. Każdy wyraz (bez względu, czy wyst±pi jako jeden czy jako dwa) powinien posiadać minimaln± długo¶ć trzech znaków. smile.gif Zdaje się, że rozwi±zanie padło zatem. smile.gif

Skoro tak go rozłożyli¶my na czę¶ci pierwsze dopiszę problematykę.

Projektowałem wzorzec do nazwy obiektu turystycznego. Rzadko zdarzaj± się trój wyrazowe nazwy, zostałem zatem przy dwóch. Obiekt turystyczny może przyjmować zatem jeden lub dwa wyrazy.
Np.
- Perła Południa
- Hańcza

Minimum wymagam ze względów estetycznych oraz z uwagi, że nazwa jest również przekształcana w subdomenę przez inny wzorzec. smile.gif

Ostateczna odpowiedĽ to zatem:
  1. preg_match('/^([0-9a-zA-Z±ćęłńó¶Ľż]{3,}+)( [0-9a-zA-Z±ćęłńó¶Ľż]{1,}+)?$/', $str, $matches);
  2. print_r($matches);

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.