Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] wyrażenia regularne (żeby nie rozróżnieniało małych i wielkich liter)
Forum PHP.pl > Forum > Przedszkole
dzemeuksis
Witam,
Założenia są takie: mamy zmienne
$dlugi_tekst
$slowo_lub_dwa
$zastap_tym_ciagiem
Zrobiłem tak:
  1. <?php
  2. $slowo_lub_dwa = '/'.$slowo_lub_dwa.'+[^a-zA-Z]/'; //sprawdza czy słowo nie jest odmienione przez przypadki
  3. $tekst_ktory_potrzebuje = preg_replace($slowo_lub_dwa, $zastap_tym_ciagiem, $dlugi_tekst, 1) //tylko pierwsze wystąpienie
  4. ?>

No i działa... prawie dobrze.
Otóż chciałbym jeszcze, żeby $slowo_lub_dwa zostało podmienione bez względu na wielkość pierwszej litery ciągu, bo teraz podmienia tylko identyczny ciąg.
A już całkiem idealnie byłoby zrobić jeszcze tak, aby w przypadku, gdy po $slowo_lub_dwa był jakiś znak interpunkcyjny, to żeby on został na swoim miejscu po podmianie ciągów, a nie znikał.
Czy da się to zrobić jakąś prostą modyfikacją mojego kodu, czy trzeba całkiem inaczej do tego podejść?
webdice
Za rozróżnianie wielkości liter w przeszukiwanym ciągu odpowiada modyfikator i (umieszczasz go po ostatnim slashu). Co do drugiego pytania to nie bardzo wiem o co Ci chodzi, podaj przykład co ma być zmienione i na co.
dzemeuksis
Rzeczywiście dodanie modyfikatora i zadziałało. Dziękuję.
A co do drugiej kwestii, to chodzi o to, aby ciąg dajmy na to
"pociąg," został zamieniony na "domek,"
a "pociąg." na "domek."
Ponieważ ten fragment kodu '+[^a-zA-Z]/', który dodałem po to, aby "pociągi" nie zamieniło mi na "domeki", tylko zostawiło nieruszone powoduje, że z "pociąg," robi "domek", a przecinek znika.
Kicok
Do "wyciągnięcia" jakichś danych dopasowanych do wyrażenia używa się okrągłych nawiasów:
  1. <?php
  2. $slowo_lub_dwa = '/' . preg_quote( $slowo_lub_dwa, '/' ) . '([^a-z])/i';
  3. ?>


Teraz dane z pierwszego nawiasu dostępne są pod zmienną $1, którą możesz użyć w funkcji preg_replace():
  1. <?php
  2. $tekst_ktory_potrzebuje = preg_replace( $slowo_lub_dwa, $zastap_tym_ciagiem . '$1', $dlugi_tekst, 1 );
  3. ?>
dzemeuksis
@Kicok: Rewelka, działa jak się patrzy. Najgorsze jest to, że nic z tego nie rozumiem winksmiley.jpg No ale jak przeanalizuję Twój kod na spokojnie z literaturą w ręku, to może w końcu zakumam.

Tymczasem mam jeszcze jedno pytanie:
Jak zrobić, żeby pociąg zamieniało na domek, ale Pociąg na Domek? Innymi słowy, jak zrobić, żeby po podmianie została zachowana wielkość liter taka jaka była w podmienionym wyrazie?
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.