Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenia regularne zamiana 2 pod rząd
Bielo
post 6.03.2004, 19:55:17
Post #1





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 21.09.2003
Skąd: Truskaw

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


mam taki kod
Kod
[url]http://www.kurs.prv.pl[/url]

[url=http://www.kurs.prv.pl]Kurs[/url]


teraz zamieniam go czymś takim
[php:1:fc70b94cec]<?php
function code($tekst)
{
$tekst=ereg_replace("(.+)","<a href="1">1</a>",$tekst);
$tekst=ereg_replace("(.+)","<a href="1">2</a>",$tekst);
return highlight_string($tekst,TRUE);
}
?>[/php:1:fc70b94cec]

i on zwraca mi

[xml:1:fc70b94cec]<a href="http://www.kurs.prv.pl[/url]
<a href="http://www.kurs.prv.pl">Kurs">http://www.kurs.prv.pl</a>
[url=http://www.kurs.prv.pl]Kurs</a> [/xml:1:fc70b94cec]
zamiast
[xml:1:fc70b94cec]<a href="http://www.kurs.prv.pl">http://www.kurs.prv.pl</a>
<a href="http://www.kurs.prv.pl">Kurs</a> [/xml:1:fc70b94cec]


--------------------
Go to the top of the page
+Quote Post
FiDO
post 6.03.2004, 22:42:32
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Sprobuj czegos takiego:
[php:1:43af3b25b6]<?php

function makelink($match)
{
$text = (empty($match[2]))? $match[1] : $match[2];

/* jeśli link zaczyna się od http:// lub ./ (link relatywny) to nie zmieniamy nic */
if (strpos($match[1],"http://") === 0 || strpos($match[1],"./") === 0)
return '<a href="'.$match[1].'">'.$text.'</a>';
else
return '<a href="http://'.$match[1].'">'.$text.'</a>';
}


/* [ url=http://www.link.com][/url] */
$txt = preg_replace_callback('!]*)](.*)!U','makelink', $txt);
/* [ url]www.link.com[/url] */
$txt = preg_replace_callback('!(.*)!U','makelink', $txt);

?>[/php:1:43af3b25b6]
Dodatkowo jest sprawdzane czy link zawiera http:// na poczatku i w razie gdy nie ma to jest automatycznie dodawane.
Jak masz pytania do kodu to śmiało.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
Bielo
post 7.03.2004, 14:41:55
Post #3





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 21.09.2003
Skąd: Truskaw

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


[php:1:f0e1337592]<?php
$tekst=ereg_replace("([^[]*)","<a href="1">1</a>",$tekst);
$tekst=ereg_replace("*)]([^[]*)","<a href="1">2</a>",$tekst);
?>[/php:1:f0e1337592]

To mi zamienia linka tak jak trzeba tylko, że podsunąłeś mi pomysł żeby zrobić dodawanie "http://".
Teraz chcę "wyłączyć" przed nawias http(jeśli jest)
[php:1:f0e1337592]<?php
$tekst=ereg_replace("http://([^[]*)","<a href="http://1">1</a>",$tekst);
$tekst=ereg_replace("*)]([^[]*)","<a href="http://1">2</a>",$tekst);
?>[/php:1:f0e1337592]

tylko co teraz zrobic żeby wyrażenie pasowało gdy nie ma "http://"?


--------------------
Go to the top of the page
+Quote Post
FiDO
post 7.03.2004, 21:09:22
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Zobacz tak:
Kod
[url=((http://)?([^[]*))]([^[]*)[/url]


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
Bielo
post 7.03.2004, 21:32:19
Post #5





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 21.09.2003
Skąd: Truskaw

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


dzięki!

teraz następne pytanie...
[php:1:3660fe94fc]<?php
$tekst=ereg_replace("
Kod
([^[]*)
","<p style="background-color: #ffffff; border: solid #Ed9438 1px">1</p>",$tekst);
?>[/php:1:3660fe94fc]

i chcę żeby wynikiem tego był kod w ramce z ponumerowanymi liniami.


--------------------
Go to the top of the page
+Quote Post
FiDO
post 7.03.2004, 22:30:45
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


To juz kwestia wygenerowania odpowiedniego html'a.

Moze to Ci pomoze: http://forum.php.pl/viewtopic.php?t=5054


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
BzikOS
post 7.03.2004, 23:21:21
Post #7





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


Wracając do semego BBCode -> HTML... może ten wątek Ci się przyda.
Go to the top of the page
+Quote Post
Bielo
post 8.03.2004, 17:45:18
Post #8





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 21.09.2003
Skąd: Truskaw

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


FiDO style nie mają tu niestety nic do rzeczy(niestety bo się na nich trochę znam aaevil.gif )

BzikOS z tymi znacznikami juz sobie poradziłem biggrin.gif .

to co ja chce zrobić to jest wyświetlenie tekstu z ponumerowanymi liniami.

kod który wpisuję:
Kod
[php]linia1

linia2

linia3

linia4[/php]


wynik:
[php:1:afaeb97f9c]<?php
linia1
linia2
linia3
linia4
?>[/php:1:afaeb97f9c]


--------------------
Go to the top of the page
+Quote Post
FiDO
post 8.03.2004, 20:13:51
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Style nie maja, masz racje. Wcale tak nie twierdzilem. Bylo trzeba jednak kliknac w linka, ktory jest w tamtym topicu to zobaczylbys przyklad kodu z numerowaniem.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
Bielo
post 8.03.2004, 21:08:55
Post #10





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 21.09.2003
Skąd: Truskaw

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


i widzę zę robisz to
[xml:1:0d0b768f79]
<table>
<tr>
<td>
<code>1<br>
2<br>
3<br>
4<br>
5<br>
itd.</code></td>
<td><code>linia1<br>
linia1<br>
linia2<br>
linia3<br>
linia4<br>
linia5<br>
itd.</code></td></tr><table>[/xml:1:0d0b768f79]

tylko teraz nie wiem jak zamienić
Kod
[php]<?kod php

komentarze

funkcje:

highlight_source();

[/php]

na taką tabelkę jaką Ty zrobiłeś


--------------------
Go to the top of the page
+Quote Post
FiDO
post 8.03.2004, 22:30:28
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Przeanalizuj to: http://stargate.uz.zgora.pl:81/~fido/mozil...illa.php?source


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
Bielo
post 12.03.2004, 21:45:15
Post #12





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 21.09.2003
Skąd: Truskaw

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


z tym sobie poradziłem fajnie to wymyśliłeś z ob.

teraz znow powracając do ereg replace.
Powioedzcie co w tym jest źle.

[php:1:685ca7fdb2]<?php
$tekst=ereg_replace("[kod]^([kod])*[/kod]","<table><tr><td style="font-weight: bold">Kod:</td></tr><tr><td style="background-color: #ffffff; border: solid #Ed9438 1px">".str_replace("]","]",str_replace("[","[",htmlentities("1",TRUE)))."</td></tr></table>",$tekst);
?>[/php:1:685ca7fdb2]

chcę żeby w zamienianym ciągu nie można było wstawić znacznika "[kod]"


--------------------
Go to the top of the page
+Quote Post
FiDO
post 13.03.2004, 03:10:43
Post #13





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Co Cie tak ciagle trzyma przy tych "ereg"'ach?? Przeciez "preg"'i sa szybsze i maja wieksze mozliwosci...

[php:1:5b69d39a4c]<?php

function zamien_kod($matches)
{
/* jesli taki ciag istnieje to zwracamy niezmieniony ciag */
if (strpos($matches[1],"[kod]") !== FALSE)
return $matches[0];

$s = "<table><tr><td style="font-weight: bold">Kod:</td></tr><tr><td style="background-color: #ffffff; border: solid #Ed9438; 1px">";
$s.= str_replace(array("]","["), array("]","["), htmlentities($matches[1], true));
$s.= "</td></tr></table>";

return $s;
}

$tekst = preg_replace_callback("![kod](.+)[/kod]!U", "zamien_kod", $tekst);

?>[/php:1:5b69d39a4c]
I jeszcze wersja extended, ktora moze byc zastosowana bardziej uniwersalnie, dla kilku roznych bbcode'ow, sama sprawdza czy w srodku nie znajduje sie poczatkowy tag tego bbcode'u:
[php:1:5b69d39a4c]<?php

function zamien_kod($matches)
{
if (strpos($matches[2], $matches[1]) !== FALSE)
return $matches[0];

$s = "<table><tr><td style="font-weight: bold">Kod:</td></tr><tr><td style="background-color: #ffffff; border: solid #Ed9438; 1px">";
$s.= str_replace(array("]","["), array("]","["), htmlentities($matches[2], true));
$s.= "</td></tr></table>";

return $s;
}

$tekst = preg_replace_callback("!([kod])(.+)[/kod]!U", "zamien_kod", $tekst);
$txt = preg_replace_callback("!([inny_tag])(.+)[/inny_tag]!U", "zamien_kod", $txt);
?>[/php:1:5b69d39a4c]


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
party
post 13.03.2004, 10:30:11
Post #14





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 19.08.2003
Skąd: Bydgoszcz

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


Nom, pregi są lepsze np. pod tym względem, że możesz do nich wrzucać tablice:
[php:1:4cf86383f6]<?php
$tekst = 'jakis tekst & inny & ble';

$a = array( 'jakis tekst', 'inny', 'ble' );
$b = array( 'jakis inny tekst', 'to samo', 'bla' );

$tekst = preg_replace( $a, $b, $tekst ); // zwroci: jakis inny tekst & to samo & bla
?>[/php:1:4cf86383f6]


--------------------
Go to the top of the page
+Quote Post
Cudi
post 13.03.2004, 11:43:29
Post #15


Administrator planeta/IRC


Grupa: Przyjaciele php.pl
Postów: 385
Pomógł: 0
Dołączył: 19.04.2003
Skąd: Zabrze

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


Cytat
z tym sobie poradziłem fajnie to wymyśliłeś z ob.

Cytat
mixed highlight_string ( string str [, bool return])
If the second parameter return is set to TRUE then highlight_string() will return the highlighted code as a string instead of printing it out. If the second parameter is not set to TRUE then highlight_string() will return TRUE on success, FALSE on failure.

W przypadku kolorowania składni buforowanie wyjścia nie jest potrzebne. W higlight_*() i kilku innych funkcjach (np. print_r()) w php 4.2.0 wprowadzono dodatkowy parametr return, który pozwala wymysić zwrócenie ciągu tekstu zamiast wysyłania go do przeglądarki.


--------------------
"Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning."
Cudi's devBlog
Go to the top of the page
+Quote Post
Bielo
post 13.03.2004, 14:53:20
Post #16





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 21.09.2003
Skąd: Truskaw

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


Dzięki fido przechodzę na pregi kolorowanie składni też już zrobiłem tylko jak dodać obsługę multiline'a chyba trzeba dodać /m albo /s tylko nie wiem gdzie :?


--------------------
Go to the top of the page
+Quote Post
FiDO
post 13.03.2004, 17:19:47
Post #17





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Flagi w preg'ach dodaje sie w ten sposob:
Kod
/wyrazenie/flagi

Np.
Kod
#[kod](.+)[/kod]#U

Wyrazeniem jest [kod](.+)[/kod], a flagą U.
Jak widac jako separator wyrazenia mozna stosowac dowolne znaki (byle poczatkowy i koncowy byl taki sam), najlepiej wybrac taki, ktorego nie ma w wyrazeniu, bo gdyby byl to trzebaby go wyescape'owac backslashem.

Flagi wypisuje sie literka po literce, czyli jak ma byc ich wiecej to piszesz:
Kod
/wyrazenie/Usi

, gdzie U, s, i to flagi.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 21:02