![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Mam taki kod:
Jego zadaniem jest zamiant tekstów linkowych na pełne linki w kodzie html. Jednak gdy teksty linkowe oddzielone są od siebie \n to na linki zamienia mi co drugi link tekstowy. Gdyby były oddzielone \r\n tp by zamieniał wszystkie na linki. W czym problem? Nie chcę tego obchodzić na zasadzie podmianiania \n na \r\n. Chciałbym to załatwić przez właściwe wyrażenie regularne. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 307 Pomógł: 37 Dołączył: 9.11.2010 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Hmmmm, jest tutaj jakiś szczególny haczyk ? Nie jestem zbyt mocny w wyr. regularnych ale to wydaje mi się dosyć proste.
Można by na przykład tak ? :
Oczywiście popraw mnie jeżeli piszę kompletne głupoty, ot tylko taki mój mały pomysł. (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Nie, nie ma haczyka, poprostu nie działa (IMG:style_emoticons/default/smile.gif)
Twój sposób działa dla tego przypadku. A jesteś w stanie powiedzieć co w moim wyrażeniu jest nie tak, że nie działa? Początek mojego wyrażenia, czyli o to: ([^">]|^) psuje wszystko. Twoje działa bo nie ma tego początku (IMG:style_emoticons/default/smile.gif) No ale ja ten początek muszę mieć. Idzie to jakoś poprawić? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 307 Pomógł: 37 Dołączył: 9.11.2010 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Tzn. można zrobić z tego ([^">]|) i pozornie działa ale to zależy do czego ci jest to konkretnie potrzebne, bo wcześniej tam była reguła 'lub nie puste' a teraz jest 'lub puste'. Może lepiej pokaż jakiś większy przykład na którym będzie można się oprzeć.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
A jesteś w stanie powiedzieć co w moim wyrażeniu jest nie tak, że nie działa? co drugie masz, gdyż na końcu wyrażenie dopasowywało Ci się do białego znaku, tam było kończone wyszukiwanie i za tym białym znakiem rozpoczynana była następna próba dopasowania - a ponieważ nie było już białego znaku (innego znaku niż w pierwszym warunku) próbowało się dopasować do pustych znaków na początku, które nie były puste, gdyż już jest tekst na początku... moja propozycja która wstępnie działa:
propozycja Uriziel01 bez modyfikatora s też powinna działać po dodaniu na początku ([^">\']|^) - oczywiście cyferki się zmienią - ale mi się sprawdzać nie chce po za tym nie lepiej skorzystać z callbacka przy zamianie bardziej złożonego ciągu?? - można wtedy dorzucić kilka ekstra sprawdzeń... Ten post edytował zegarek84 27.01.2012, 21:56:02 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Też uważam że lepiej to zrobić callbackiem, i działający przykład dałem tutaj: http://forum.php.pl/index.php?showtopic=18...t-member-912891
Ale również można całość machnąć w jednym wyrażeniu, używając negatywnego przewidywania wstecznego i takie wyrażenie wyglądać będzie w ten sposób: Kod #(?<!["'>]) ((f|ht)tp(s)?://[^\s]+)#is A działać będzie w taki sposób: http://gskinner.com/RegExr/?2vrhs Oczywiście wyrażenie do przechwytywania linków dostosujesz już pod swoje wymagania, osobiście używam takiego, ponieważ często w tekście można napisać www dodając kropkę i powstają niepotrzebnie linki (IMG:style_emoticons/default/wink.gif) BTW w przypadku kiedy będziesz szukać linków również po www, to moja metoda jak i wszystkich innych którzy tutaj podali jakieś rozwiązanie, będzie działać nieprawidłowo. Z prostego względu, kiedy szukasz linków po www, a wykluczasz jedynie apostrof/cudzysłów, wówczas mając w kodzie html link zaczynający się od http, taki link również zostanie złapany. Czyli prócz samego wykluczania apostrofu/cudzysłowia, musiałbyś jeszcze wykluczyć ftp/http/https i pewnie jeszcze kilka innych protokołów. Dlatego lepiej wyszukiwanie linku po www sobie darować (IMG:style_emoticons/default/wink.gif) chyba że ci na tym zależy, to trzeba by wówczas pokombinować.. (IMG:style_emoticons/default/wink.gif) EDIT: małe poprawki w wyrażeniu, zapomniałem o spacji i łapało za dużo.. Ogólnie to widzę że to i tak nie jest idealne rozwiązanie i będzie trzeba trochę pokombinować żeby to jakoś działało. Jednak lepszy callback (IMG:style_emoticons/default/wink.gif) Ten post edytował by_ikar 27.01.2012, 20:34:16 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 600 Pomógł: 2 Dołączył: 1.09.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Hmmmm, jest tutaj jakiś szczególny haczyk ? Nie jestem zbyt mocny w wyr. regularnych ale to wydaje mi się dosyć proste. Można by na przykład tak ? : Spróbuj sobie na przykładzie adresu bez http:// taki odnosnik źle działa.. trzeba wtedy dokleić http:// Ten post edytował kukix 27.01.2012, 21:53:17 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 307 Pomógł: 37 Dołączył: 9.11.2010 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj sobie na przykładzie adresu bez http:// taki odnosnik źle działa.. trzeba wtedy dokleić http:// Hmmm, a jak mając samo test.pl masz zamiar powiedzeć że to linka ? Przecież mogę napisać w poście 'słowo.Tak więc' całkowicie przypadkowo nie chcąc aby zostało to zamienione na jakikolwiek link w stylu <a href="http://slowo.tak">/slowo.tak</a>, tak więc bez http,https,ftp,www nie jest to adres a jedynie zwykła fraza. |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ok, dziękuję panowie. W wolnej chwili przeanalizuje to wszystko na spokojnie (IMG:style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 13:07 |