Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenie regularne - jeden lub dwa wyrazy
gregiolo
post 3.02.2010, 10:50:35
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 1.02.2010
Skąd: Warszawa

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


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.
Go to the top of the page
+Quote Post
m_i_n
post 3.02.2010, 10:59:05
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 18.11.2008

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


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, } ?$

Ten post edytował m_i_n 3.02.2010, 10:59:20
Go to the top of the page
+Quote Post
wookieb
post 3.02.2010, 11:00:22
Post #3





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




Kod
preg_match('/^(\w+)( {3,}\w+)?$/', $str, $matches);
print_r($matches);


\w+ zamien sobie na twoje [0-9a-zA-Ząćęłńóśźż]{3,}


--------------------
Go to the top of the page
+Quote Post
pyro
post 3.02.2010, 11:06:58
Post #4





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


@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


Ten post edytował pyro 3.02.2010, 11:12:48


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
wookieb
post 3.02.2010, 11:14:40
Post #5





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




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

Ten post edytował wookieb 3.02.2010, 11:15:46


--------------------
Go to the top of the page
+Quote Post
pyro
post 3.02.2010, 11:20:08
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


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_]

Ten post edytował pyro 3.02.2010, 11:22:39


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
wookieb
post 3.02.2010, 11:23:44
Post #7





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




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

Ten post edytował wookieb 3.02.2010, 11:24:18


--------------------
Go to the top of the page
+Quote Post
pyro
post 3.02.2010, 11:27:22
Post #8





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


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

Ten post edytował pyro 3.02.2010, 11:28:45


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
wookieb
post 3.02.2010, 11:28:16
Post #9





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




Autor zweryfikuje snitch.gif


--------------------
Go to the top of the page
+Quote Post
gregiolo
post 4.02.2010, 15:24:23
Post #10





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 1.02.2010
Skąd: Warszawa

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


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);

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: 13.08.2025 - 23:32