Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z patternem do regexa
Forum PHP.pl > Forum > PHP
Raven1122
Witam,

Dopiero raczkuje w regexpach i napisalem takie cos:

  1. $msg = "http://facebook.com";
  2. if(preg_match('/^http:\/\/$+^facebook|youtube|mp3t$+^.pl|.com|.eu$+[a-zA-Z0-9/]{1, }+^/$', $msg, $matches)){
  3. print_r($matches);
  4. }


Chodziło mi o to, że link, który wpiszemy może być linkiem facebooka, youtuba oraz portalu do którego to pisze.

Jednak wywala mi to następujący błąd:
Warning: preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Unknown modifier '$' in D:\wamp\www\pregmatch.php on line 3

Gdzie popiełniłem błąd??

Prosze o wytłumaczenie dość proste bo regexy dopiero zacząłem smile.gif
sowiq
To może najpierw wytłumacz co chcesz osiągnąć przez powtarzające się znaczki ^ i $? Stosujesz je niepoprawnie, bo ^ oznacza początek, a $ koniec testowanego ciągu. A oczywistym jest, że nie możesz mieć kilku początków i kilku końców w jednym ciągu.

Druga sprawa, że za delimiterem wyrażenia regularnego (w Twoim przypadku znak /) można umieścić tylko listę tzw. modyfikatorów. Znak $ do nich nie należy, dlatego dostajesz błąd. (Chodzi dokładnie o ten znak: /$')

[edit]
Na początek polecam trochę teorii.

http://kursphp.com/wyrazenia_regularne.php

http://www.programuj.com/artykuly/www/regularne.php

http://thebat.pl/podrecznik/TB_regx_syntx.php
pyro
Podstawowe błędy w tym wyrażeniu:
1. Stosujesz znak oznaczający początek ciągu więcej niż raz - widziałeś kiedyś, żeby książka miała dwa początki?
2. Zastosowanie znaku końca ciągu za ogranicznikiem
3. Niepoprawna zastosowana alternatywa, teraz np. przy pierwszym jego użyciu wyszuka "k" lub "y"
Crozin
1. Znacznik początku i końca ciągu może być użyty wielokrotnie w wyrażeniu, ale musi to być zrobione w odpowiedni sposób - tutaj nie ma dla tego miejsca.
2. Po co w ogóle korzystasz z jakiegoś paskudnego wyrażenia skoro zdecydowanie bardziej czytelnym i łatwiejszym w utrzymaniu będzie skorzystanie z parse_url i kilku prostych instrukcji warunkowych?
pyro
Cytat(Crozin @ 23.01.2013, 19:53:39 ) *
1. Znacznik początku i końca ciągu może być użyty wielokrotnie w wyrażeniu, ale musi to być zrobione w odpowiedni sposób - tutaj nie ma dla tego miejsca.


No to podaj jakiś przykład wyrażenia regularnego z dwoma znakami specjalnymi oznaczającymi początek stringu, bo może przespałem coś na lekcji wyrażeń regularnych?
Crozin
Proszę bardzo:
Kod
#(^abc|^xyz|hello)#
Pasuje do ciągu, który: a) zaczyna się od "abc" bądź "xyz" cool.gif zawiera w sobie frazę "hello".
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.