Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Regex
Forum PHP.pl > Forum > PHP
topik53
Witam.
Ostatnio staram sie stworzyc pewna strone.
Niestety regexow nie ogarniam wogole.
Posił bym o zbudowanie regexa ktory wyciagał by takie : http://apps.facebook.com/monster-world/?st...39-514AD9B643F6 linki.
Wiem że dla was to minuta a ja będe meczył się nastepny miesiac.
Tak prosze o gotowca. Mam nadzieje ze zrozumiecie.
sowiq
Rozumiem brak umiejętności, ale czystego lenistwa jakoś nie potrafię.

https://www.google.pl/search?q=regex+to+get+urls - pierwszy wynik z Google i już masz odpowiedź z przykładem.
topik53
Up, dziekuje za link z googla. Chodzi mi o to żeby mieć pewność że żaden inny link sie tam nie wkradnie.
czy mozesz potwierdzić mi czy ten :
\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[A-Z0-9+&@#/%=~_|]
regex mi to zapewni?
CuteOne
Sam, możesz to sprawdzić np. tu http://www.rexv.org/
topik53
Mam nadzieje ze wybaczycie.
  1. function insertLinks($source)
  2. {
  3.  
  4. $pattern = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
  5.  
  6. preg_match($pattern, $source, $link);
  7. $ile = count($link);
  8. for($i = 0;$i<=$ile;$i++)
  9. {
  10. echo $i.' '. $link[$i].'<br />';
  11. }
  12. }

Oto moj kod.
Chodzi mi o wyciagniecie wszystkich linków z tekstu.
Niestety regex który znalazłem nie potrafi sobie z tym poradzić i zwraca mi to :
  1. 0 <a href="http://apps.facebook.com/monster-world/?st1=8&st2=1&u=e0d9726fdba3cb03&language=en&s=100001019823381&from=feed&w_accept=0A1F8AB6-CBC4-2BAB-2439-514AD9B643F6" target="_blank">http://apps.facebook.com/monster-world/?st...39-514AD9B643F6</a>
  2. 1 http
  3. 2 /monster-world/?st1=8&st2=1&u=e0d9726fdba3cb03&language=en&s=100001019823381&from=feed&w_accept=0A1F8AB6-CBC4-2BAB-2439-514AD9B643F6
  4. 3

Prosze o jakies sugestie.

ref

ref
abort
Cytat(topik53 @ 29.10.2012, 19:20:42 ) *
Niestety regex który znalazłem nie potrafi sobie z tym poradzić i zwraca mi to :


I dobrze zwraca. Spróbuj tego:
Kod
$pattern = "/((http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?)/";

FYI: dodałem tylko dwa nawiasy (na początku i końcu) - ale powinno pomóc. Nie testowałem.
I nie podbijaj postów.
topik53
Regex teoretycznie dziala.
Teraz pojawia sie problem bo wyciaga nie wszystkie linki. Zwraca mi tylko 4 elementową tablice, a linkow jest ponad 20. Być moze popełniłem gdzieś elementarny bład, prosze o poprawienie mnie.
abort
Spróbuj użyć preg_match_all - na razie nic więcej nie jestem w stanie powiedzieć - nie wiem, w jakiej postaci masz tekst, w którym są adresy, a to w sumie podstawa. Przydałoby się ciutkę opisu/kodu, bez tego to błądzenie we mgle.
topik53
Chodzi o to ze linki beda wprowadzane przez uzytkownika. i chce je dodac oddzielnie do bazy. Linki beda oddzielone prawdopodobnie enterem.
abort
No to wprowadzone dane (przez usera) ładujesz do zmiennej i jedziesz z preg_match_all - najprawdopodobniej dostaniesz wielowymiarową tablicę, po której będziesz musiał iterować, ale to nie powinno być problemem, prawda?
webmaniak
Witam,
odświeżam nieco temat.
Potrzebuję zbudować regex który akceptuje wszystkie znaki narodowe, alfanumeryczne, kilka specjalnych: ' . , - / @. Udało mi się utworzyć takie wyrażenie ale nie uwzględniało znaków narodowych - a one muszą być i zapytanie muszę zbudować od nowa. Umie ktoś pomóc, podpowiedzieć?
kristaps
Widziałeś ten temat? Pokaż co udało Ci się napisać, coś doradzimy.
webmaniak
Nie widziałem tamtego tematu. Ale go teraz przejrzałem. To udało mi się zrobić:
Kod
/(\p{L})+/u

I zawsze jest prawda, czyli przepuszcza wszystko.
A w tamtym temacie nawet ktoś potrzebował podobnego wyrażenia i w odpowiedzi otrzymał:
Kod
#[\p{L}0-9.-_]+#u

Ale to jakoś nie działa ;/ Tzn. zwraca true dla znaku np. $
Pokombinowałem nieco i dodałem:
Kod
/[\p{L}\x20\x2C\x2E\x27\x2D\x40\x5F\x2F]+/u

No ale to zezwala na znaki specjalne, a mi zależy by przepuszczało tylko te wymienione. Czyli oba wyrażenia działają tak samo.
Edit:
Wyrażenia działają tak:
-wpiszę znak specjalny spoza listy - fałsz
-wpiszę tekst i znak specjalny, np. tekst*** - prawda
Edit2:
Problem rozwiązany. Wyrażenie działa w php i js. Dzięki kristaps za podrzucenie linku, naprowadziło mnie to nieco. Szkoda że nikt inny nie chciał pomóc ale najwyraźniej nikt nie potrafił/nie miał czasu. Jeśli ktoś będzie miał podobny problem to zapraszam na priv.
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.