![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 4.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Potrzebuję wyrażenia regularnego, które dopasuje się do każdego adresu (typu http//...) NIE otoczonego tagiem [a]adres[/a] i NIE zawartego w tagu [a adres]...[/a]. Chodzi o poszerzenie funkcjonalności małego forum tak, żeby za pomocą preg_matcha samodzielnie robiło linki z wpisywanych adresów. Efekt ma być taki, że odnalezione gołe adresy wylądują w tagach [a]adres[/a]. Z resztą ma sobie radzic istniejący bbcode.
O co mi chodzi? Może najlepiej będzie na przykładzie: Taki input: Kod http://example.com/ex/am/ple/ Zobacz: http://www.example.com/zobacz.php?zo=1&bacz=2 <- naprawdę świetne [innytag]http://example.com/ex/am/ple/[/innytag] Tego nie przetwarzaj: [a]http://example.com[/a] Tego też: [a http://example.com/nvm]example[/a] chcę przetworzyc na taki output: Kod [a]http://example.com/ex/am/ple/[/a] Zobacz: [a]http://www.example.com/zobacz.php?zo=1&bacz=2[/a] <- naprawdę świetne [innytag][a]http://example.com/ex/am/ple/[/a][/innytag] Tego nie przetwarzaj: [a]http://example.com[/a] Tego też: [a http://example.com/nvm]example[/a] Oczywiście próbowałem napisać takiego prega sam, ale nic z tego nie wyszło, mimo przekopania kilku kursów... Będę wdzięczny za pomoc. EDIT: Hmm, nadal żadnej odpowiedzi... Jeśli mój topic nie pasuje do przedszkola, proszę moderatora o przeniesienie. A może jest inny sposób na rozwiązanie mojego problemu? Pomocy... (IMG:style_emoticons/default/sciana.gif) Ten post edytował Hellelujah 16.01.2010, 19:18:07 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 141 Pomógł: 17 Dołączył: 2.04.2008 Skąd: z Zabrza Ostrzeżenie: (0%) ![]() ![]() |
1) Usuń wszystkie [a] z tekstu
2) Usuń wszystkie [/a] z tekstu 3) Usuń wszystkie [a http://example.com/nvm] 4) Napisz prosty pattern, który zamienia wszystko co ma na początku http:// na [a]link[/a] lub [a link]link[/a] W podpunkcie 4 możesz skorzystać z przykładu z manuala:
Ten post edytował lukaszgolder 16.01.2010, 19:26:28 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 389 Pomógł: 141 Dołączył: 11.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Do znalezienia wszystkich trafień możesz uzyć tego wzorca:
Kod /(?<!(\[a\])|(\[a ))((http|https|ftp):\/\/|www)[a-z0-9\-\._]+\/?[a-z0-9_\.\-\?\+\/~=&#;,]*[a-z0-9\/]{1}/si znajdzie on wszystkie adresy url, które na początku nie mają [a] albo [aSPACJA |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 4.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Świetnie - dzięki, athei. Właśnie tego szukałem. Czy mógłbyś jeszcze wyjaśnić, jak działa ten pierwszy atom "(?<!(\[a\])|(\[a ))"? Nie mogę tego znaleźć w dokumentacji.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 389 Pomógł: 141 Dołączył: 11.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jest w dokumentacji, http://www.pcre.org/pcre.txt
(?<!foo)bar does find an occurrence of "bar" that is not preceded by "foo". W Twoim przypadku znajdzie występienie url, gdy nie jest poprzedzone [a] lub [aSPACJA. O regexp masz tutaj http://www.regular-expressions.info/tutorial.html Pomogłem daj + (IMG:style_emoticons/default/smile.gif) Ten post edytował athei 16.01.2010, 20:50:21 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 4.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wcześniej szukałem w http://www.regular-expressions.info/reference.html i gdzieś jeszcze, ale takiego voodoo tam nie znalazłem (IMG:style_emoticons/default/biggrin.gif) Wielkie dzięki! Ten post edytował Hellelujah 16.01.2010, 20:57:15 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.09.2025 - 02:02 |