🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
13 messages
13 total messages Started by dawidparys Mon, 27 Aug 2001 10:07
Zamiana z ereg_replace
#1240
Author: dawidparys
Date: Mon, 27 Aug 2001 10:07
15 lines
1219 bytes
Witam!

Chcę zamienić znak '+' na '%2b' poprzez ereg_replace, ale po zwykłym wywołaniu 
czyli:
$tekst = ereg_replace("+","%2b",$tekst);

otrzymuję komunikat:
Warning: REG_BADRPT: in ... on line 41
gdzie linia 41 to podana wyżej zamiana. 
Pytanie brzmi: co robię źle i jak można to wykonać?

pozdrawiam Dawid Parys

-- 
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: Zamiana z ereg_replace
#1241
Author: Filipus
Date: Mon, 27 Aug 2001 10:35
21 lines
1464 bytes
Cześć

> Chcę zamienić znak '+' na '%2b' poprzez ereg_replace,
> ale po zwykłym wywołaniu czyli:
> $tekst = ereg_replace("+","%2b",$tekst);
> 
> otrzymuję komunikat:
> Warning: REG_BADRPT: in ... on line 41

ereg_replace operuje na wyrażeniach regularnych. 
+ ma w w nich specjalne znaczenie, podobnie jak .()[]|*^$ 
żeby użyć go (i innych znaków specjalnych) jako normalnego znaku, 
który ma się pojawić w tekscie, poprzedź go backslash'em:

$tekst = ereg_replace("\+","%2b",$tekst);

[polecam gdzieś poczytać więcej o wyrażeniach regularnych, 
nie są zbyt trudne, a mają duuuże możliwości].

pozdrawiam
Filipus
Re: Zamiana z ereg_replace
#1249
Author: Filipus
Date: Mon, 27 Aug 2001 10:40
25 lines
1629 bytes
Jako że piszę pierwszy raz na grupę, witam wszystkich.! :)

Cześć

> Chcę zamienić znak '+' na '%2b' poprzez ereg_replace,
> ale po zwykłym wywołaniu czyli:
> $tekst = ereg_replace("+","%2b",$tekst);
> 
> otrzymuję komunikat:
> Warning: REG_BADRPT: in ... on line 41

ereg_replace operuje na wyrażeniach regularnych. 
+ ma w w nich specjalne znaczenie, podobnie jak .()[]|*^$ 
żeby użyć go (i innych znaków specjalnych) jako normalnego znaku, 
który ma się pojawić w tekscie, poprzedź go backslash'em:

$tekst = ereg_replace("\+","%2b",$tekst);

[polecam gdzieś poczytać więcej o wyrażeniach regularnych, 
nie są zbyt trudne, a mają duuuże możliwości].

pozdrawiam
Filipus

[sorry za cancel. zapomniałem, że skrobię tu pierwszy raz. ;) ]
Re: Zamiana z ereg_replace
#1242
Author: Piotr Kęplicz
Date: Mon, 27 Aug 2001 10:49
13 lines
1423 bytes
Filipus <filipus@nospam.rpg.pl>:
: $tekst = ereg_replace("\+","%2b",$tekst);
:
: [polecam gdzieś poczytać więcej o wyrażeniach regularnych,
: nie są zbyt trudne, a mają duuuże możliwości].

Przy okazji, kiedy nie operuje sie na wyrazeniach regularnych to
lepiej skorzystac z str_replace.

--     ||
  ||)) ||<<   ==>   Nowy Polski Słownik Pijacki   ==>   http://pijacki.ez.pl/
  ||
                    ,,Myśl lokalnie, działaj globalnie.''
Re: Zamiana z ereg_replace
#1250
Author: Gr0g
Date: Mon, 27 Aug 2001 11:06
8 lines
1440 bytes
> [polecam gdzieś poczytać więcej o wyrażeniach regularnych,
> nie są zbyt trudne, a mają duuuże możliwości].

przy okazji to jak zanegowac jakis ciag znakow w wyrazeniu bo w opisach
znalazlem tylko negacje znakow w tablicy ([^...]) a ja kce np. znalesc ciagi
nie zaczynajace sie od "http".

krzysiek
Re: Zamiana z ereg_replace
#1251
Author: slawek-
Date: Mon, 27 Aug 2001 12:19
9 lines
1099 bytes
"Gr0g" <krzysiek@gr0g.prv.pl> napisał
> przy okazji to jak zanegowac jakis ciag znakow w wyrazeniu bo w opisach
> znalazlem tylko negacje znakow w tablicy ([^...]) a ja kce np. znalesc
ciagi
> nie zaczynajace sie od "http".

np. !ereg....

slawek-
Re: Zamiana z ereg_replace
#1252
Author: Filipus
Date: Mon, 27 Aug 2001 12:21
29 lines
1915 bytes
slawek- wrote:
> 
> "Gr0g" <krzysiek@gr0g.prv.pl> napisał
> >
> > przy okazji to jak zanegowac jakis ciag znakow w wyrazeniu bo
> > w opisach znalazlem tylko negacje znakow w tablicy ([^...]) a ja
> > kce np. znalesc ciagi nie zaczynajace sie od "http".
>
> np. !ereg....

Obawiam się, że Twojemu przedmówcy nie dokładnie o to chodziło.
Jestem wręcz pewien, że potrafi zaprzeczać warunki.
___________________________________

AFAIK w regexp'ach nie ma wyrażeń do zaprzeczania całych ciągów. 
Nie wiem dlaczego, nie działa na "^[^h][^t][^t][^p]"
Ale jeżeli "musisz" użyć regexp'a (np wyciągnąć 
(wcześniej czy później) nazwę hosta lub ścieżkę), 
to możesz to zrobić np tak:

ereg("^(.*)://([^/]+)(/.*|$)", $tekst, $znalezione);
if ($znalezione[1] == 'http') {
	print("Protokół : ". $znalezione[1] ."<br>\n");
	print("Host : ". $znalezione[2] ."<br>\n");
	print("Ścieżka : ". $znalezione[3] ."<br>\n");
}

pozdrawiam
Filipus
Re: Zamiana z ereg_replace
#1253
Author: Gr0g
Date: Mon, 27 Aug 2001 12:37
25 lines
2237 bytes
> AFAIK w regexp'ach nie ma wyrażeń do zaprzeczania całych ciągów.
> Nie wiem dlaczego, nie działa na "^[^h][^t][^t][^p]"
> Ale jeżeli "musisz" użyć regexp'a (np wyciągnąć
> (wcześniej czy później) nazwę hosta lub ścieżkę),
> to możesz to zrobić np tak:
>
> ereg("^(.*)://([^/]+)(/.*|$)", $tekst, $znalezione);
> if ($znalezione[1] == 'http') {
> print("Protokół : ". $znalezione[1] ."<br>\n");
> print("Host : ". $znalezione[2] ."<br>\n");
> print("Ścieżka : ". $znalezione[3] ."<br>\n");
> }

Dokladnie potrzebne mi jest to do zmieniania linkow w wyswietlanym pliku.
jezeli mam plik html w ktorym sa odnosniki np:
<a href="strona.html">strona</a>
to zamieniam taki link dodajac na poczatek:
<a href="baza/numer_artykulu/strona.html">strona</a>
no ale do tego musze rozrozniac lokalne linki.

ewentualnie jezeli ma ktos jakis inny pomysl jak takie cos obsluzyc (chodzi
mi o baze artykulow) nie wliczajac uzycia ramek.

pozdrowienia
krzysiek.
Re: Zamiana z ereg_replace
#1254
Author: Filipus
Date: Mon, 27 Aug 2001 14:16
24 lines
1972 bytes
Cześć

Gr0g wrote:

> Dokladnie potrzebne mi jest to do zmieniania linkow w wyswietlanym
> pliku. jezeli mam plik html w ktorym sa odnosniki np:
> <a href="strona.html">strona</a>
> to zamieniam taki link dodajac na poczatek:
> <a href="baza/numer_artykulu/strona.html">strona</a>
> no ale do tego musze rozrozniac lokalne linki.

Obawiam się, że niebardzo wiem o co Ci dokładnie chodzi. :(
Przecież jak sam tworzysz linki, to odróżnisz które są lokalne 
a które nie. 
A jeżeli musisz to jakoś sprawdzać, to porównuj nazwę hosta zwracaną 
przez to wyrażenie, z zawartością zmiennych:
$HTTP_SERVER_VARS['HTTP_HOST']   i   $HTTP_SERVER_VARS['LOCAL_ADDR']

Tak btw: jeżeli ktoś ma ochotę, to spod adresu 
http://oak.rpg.pl/~filipus/php.txt    może sobie ściągnąć 
funkcję do wyświetlania zawartości tablic (indeksowanych zwykle 
i asocjacyjnych, zagnieżdżonych itd). Mam nadzieję, że się przyda...
pozdrawiam
Filipus
Re: Zamiana z ereg_replace
#1256
Author: rafal wiosna
Date: Mon, 27 Aug 2001 17:38
12 lines
1573 bytes
* Gr0g <krzysiek@gr0g.prv.pl> wrote:
 > Dokladnie potrzebne mi jest to do zmieniania linkow w wyswietlanym pliku.
 > jezeli mam plik html w ktorym sa odnosniki np:
 > <a href="strona.html">strona</a>

	Nie prościej dodać <BASE href="..."> zaraz po <HEAD>?
 

-- 
__________________________________________________________________________
rafal wiosna * Polbox On-Line Service Sp. z o.o. * TDCIP * In ARP we trust
RAFD-RIPE * PGP nyckeln finns tillgänglig pĺ www.se.pgp.net (ID: 3CDCB7A9)
Re: Zamiana z ereg_replace
#1257
Author: Andrzej Kaczmarek
Date: Mon, 27 Aug 2001 17:44
34 lines
2081 bytes
Filipus napisał(a):

> AFAIK w regexp'ach nie ma wyrażeń do zaprzeczania całych ciągów. 

Są. Na przykład:
/Windows (?!95|98|Me)/
dopasuje np 'Windows NT' lub 'Windows 2000', ale nie dopasuje np. 'Windows 95'

Tylko że AFAIR nie można napisać:
/(?!http:\/\/)jakis_tekst/

> Nie wiem dlaczego, nie działa na "^[^h][^t][^t][^p]"
> Ale jeżeli "musisz" użyć regexp'a (np wyciągnąć 
> (wcześniej czy później) nazwę hosta lub ścieżkę), 
> to możesz to zrobić np tak:
> 
> ereg("^(.*)://([^/]+)(/.*|$)", $tekst, $znalezione);
> if ($znalezione[1] == 'http') {
> 	print("Protokół : ". $znalezione[1] ."<br>\n");
> 	print("Host : ". $znalezione[2] ."<br>\n");
> 	print("Ścieżka : ". $znalezione[3] ."<br>\n");
> }

A można i bez regexpów:
<?
  $url = parse_url($url);
  id (strtolower($url[scheme]) != 'http') {
    echo 'tralalala';
  }
?>

-- 
pozdrawiam,
Andrzej
Re: Zamiana z ereg_replace
#1255
Author: Gr0g
Date: Mon, 27 Aug 2001 21:49
8 lines
1625 bytes
> Obawiam się, że niebardzo wiem o co Ci dokładnie chodzi. :(
> Przecież jak sam tworzysz linki, to odróżnisz które są lokalne
> a które nie.
zakladajac ze chce udostepnic np jakis manual, wezmy php, to imho nie jest
dobrym rozwiazaniem zmieniac kazdy link w kilkuset plikach, chcialbym miec
to zalatwione przez skrypt.

pozdrowienia.
Re: Zamiana z ereg_replace
#1258
Author: Filipus
Date: Tue, 28 Aug 2001 06:21
25 lines
1505 bytes
Witam

Andrzej Kaczmarek wrote:

> > AFAIK w regexp'ach nie ma wyrażeń do zaprzeczania całych ciągów.
> 
> Są. Na przykład:
> /Windows (?!95|98|Me)/
> dopasuje np 'Windows NT' lub 'Windows 2000', ale nie dopasuje np.
> 'Windows 95'

Duże THX za informację. :)

> A można i bez regexpów:
> <?
>   $url = parse_url($url);
>   id (strtolower($url[scheme]) != 'http') {
>     echo 'tralalala';
>   }
> ?>

Również thx. 
No tak, nie raz otwierałem otwarte już przez kogoś drzwi... 
pozdrawiam
Filipus
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads