Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace problem z funckją
Forum PHP.pl > Forum > PHP
pawelvod
Mam string 'JakasTamZmienna'. Potrzebuję go przerobić na string 'jakas_tam_zmienna', czyli po pierwsze zamienić wszystkie litery na male, a po drugie wszystkie duże litery w środku stringa poprzedzić znakiem '_'.

Zrobiłem to przy użyciu funkcji:

  1. <?php
  2. echo ereg_replace('([A-Z])','_0','JakasTamZmienna');
  3. ?>


ale po pierwsze nie potrafię wykluczyć z zamiany pierwszej dużej litery więc muszę używać potem substr() żweby wyciąć pierwsze '_' i strtolow() żeby zamienić wszystkie znaki na małe, a po drugie nie wiem dlaczego nie działa mi zapis drugiego z parametrów funkcji w sposób:

  1. <?php
  2. echo ereg_replace('([A-Z])','_$0','JakasTamZmienna');
  3. ?>


choć używam php 5.1.6 i ten sposób jest zalecany wg. php.net

teraz moja funkcja wygląda tak:
  1. <?php
  2. echo strtolower(substr(ereg_replace('([A-Z])','_0',$name),1));
  3. ?>

a pewnie da ją sie zapisać elegancko poprzez jedno ereg_replace().
siemakuba
pierwsza sprawa:
  1. <?php
  2. preg_replace('/(B[A-Z])/', "_$0", 'ZmiennaMojaPrzykladowa');
  3. //wynik: Zmienna_Moja_Przykladowa
  4. ?>

działa taki $0 zapis parametru, bo jest on objęty cudzysłowami a nie apostrofami.
Ciągle jednak pozostają wielkie litery. Mógłbyś co prawda użyć modyfikatora e i funkcji strtolower" title="Zobacz w manualu php" target="_manual, ale wynik wciąż nie będzie poprawny:
  1. <?php
  2. preg_replace('/(B[A-Z])/e', "strtolower('_$0')", 'ZmiennaMojaPrzykladowa');
  3. //wynik: Zmienna_moja_przykladowa
  4. ?>


Najprościej więc chyba zrobić koniec końców tak:
  1. <?php
  2. echo strtolower(preg_replace('/(B[A-Z])/', "_$0", 'ZmiennaMojaPrzykladowa'));
  3. //wynik: zmienna_moja_przykladowa
  4. ?>


pozdr.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.