Zamiana ereg_replace() na preg_replace()

Zamiana ereg_replace() na preg_replace()
CH
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Zamość
  • Postów:16
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ę:

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

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

Kopiuj
 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ś?

Pozdrawiam
Artur
edytowany 1x, ostatnio: chudya
OA
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 10 lat
  • Postów:95
0

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

CH
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Zamość
  • Postów:16
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.


Pozdrawiam
Artur
OA
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 10 lat
  • Postów:95
1

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

CH
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Zamość
  • Postów:16
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.

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

Oak, bardzo dziękuję za pomoc :)


Pozdrawiam
Artur

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.