Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Regex
topik53
post
Post #1





Grupa: Zarejestrowani
Postów: 107
Pomógł: 1
Dołączył: 3.06.2010

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
sowiq
post
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


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.
Go to the top of the page
+Quote Post
topik53
post
Post #3





Grupa: Zarejestrowani
Postów: 107
Pomógł: 1
Dołączył: 3.06.2010

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


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?
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Sam, możesz to sprawdzić np. tu http://www.rexv.org/
Go to the top of the page
+Quote Post
topik53
post
Post #5





Grupa: Zarejestrowani
Postów: 107
Pomógł: 1
Dołączył: 3.06.2010

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


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
Go to the top of the page
+Quote Post
abort
post
Post #6





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


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.
Go to the top of the page
+Quote Post
topik53
post
Post #7





Grupa: Zarejestrowani
Postów: 107
Pomógł: 1
Dołączył: 3.06.2010

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


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.
Go to the top of the page
+Quote Post
abort
post
Post #8





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


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.
Go to the top of the page
+Quote Post
topik53
post
Post #9





Grupa: Zarejestrowani
Postów: 107
Pomógł: 1
Dołączył: 3.06.2010

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


Chodzi o to ze linki beda wprowadzane przez uzytkownika. i chce je dodac oddzielnie do bazy. Linki beda oddzielone prawdopodobnie enterem.
Go to the top of the page
+Quote Post
abort
post
Post #10





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


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?
Go to the top of the page
+Quote Post
webmaniak
post
Post #11





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


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ć?
Go to the top of the page
+Quote Post
kristaps
post
Post #12





Grupa: Zarejestrowani
Postów: 279
Pomógł: 36
Dołączył: 1.03.2012

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


Widziałeś ten temat? Pokaż co udało Ci się napisać, coś doradzimy.

Ten post edytował kristaps 28.01.2013, 14:53:30
Go to the top of the page
+Quote Post
webmaniak
post
Post #13





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


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.

Ten post edytował webmaniak 29.01.2013, 18:30:56
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 15:12