Zamiana ereg_replace() na preg_replace()

0

Cześć.
Używam jako wyszukiwarki na swojej stronie skryptu DGS Search. Jestem z niego zadowolony. Jednak po przeniesieniu na inny serwer (zapewne jest na nim zainstalowana nowsza wersja PHP) mam z nim problem. Chodzi o linię:

$installBase = ereg_replace("(^.*)[/\\]$", "\\1", $config["installBase"]);

Przerobiłem ją do postaci:$installBase = preg_replace("/(^.*)[/\]$/", "\1", $config["installBase"]);

 wstawiając ukośniki we wzorcu, jednak przy uruchamianiu skryptu wyświetla mi się informacja: 
> Warning: preg_replace() [function.preg-replace]: Unknown modifier '\' in /home/elnarnst/public_html/elnar/wyszuk/search.php on line 17
 Gdy ukośniki zastąpiłem znakami**#**, wyświetlił mi się komunikat:
> Warning: preg_replace() [function.preg-replace]: Compilation failed: missing terminating ] for character class at offset 10 in /home/elnarnst/public_html/elnar/wyszuk/search.php on line 17
 Próbuję zgłębić tajniki wyrażeń regularnych, ale nie mogę pojąć m.in. tego, dlaczego przed dwoma backslashami jest ukośnik. Jeżeli nawiasy kwadratowe oznaczają **wyłącznie jeden znak**, to jaki w końcu w tym miejscu spełnia wymagania?
Co ciekawe, w wersji z ereg_replace() skrypt działał właściwie. Mam za mało kwadratowy łeb, żeby to wszystko pojąć... Pomoże mi ktoś?
0

Spróbuj $installBase = preg_replace('#(^.*)[/\\]$#', '\1', $config["installBase"]);

0
Oak napisał(a):

Spróbuj $installBase = preg_replace('#(^.*)[/\\]$#', '\1', $config["installBase"]);

Przed chwilką spróbowałem. Mam ten sam komunikat o problemie:

Warning: preg_replace() [function.preg-replace]: Compilation failed: missing terminating ] for character class at offset 10 in /home/elnarnst/public_html/elnar/wyszuk/search.php on line 17

Kiedy zmienię znaki z # na /, mam z powrotem komunikat taki sam jak wcześniej, czyli usunięcie ukośnika w '\1' niczego, niestety, nie zmienia.

1

Może $installBase = preg_replace('#(^.*)[/\\\\]$#', '\1', $config["installBase"]);. ;) Jeżeli to nie to, to nie mam już pomysłów.

0
Oak napisał(a):

Może $installBase = preg_replace('#(^.*)[/\\\\]$#', '\1', $config["installBase"]);. ;) Jeżeli to nie to, to nie mam już pomysłów.

Działa! Wystarczą dodatkowe ukośniki we wzorcu w nawiasie kwadratowym. Przed 1 mogą zostać dwa.

$installBase = preg_replace('#(^.*)[/\\\\]$#', '\\1', $config["installBase"]); 

Oak, bardzo dziękuję za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1