Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] wyrażenia regularne (żeby nie rozróżnieniało małych i wielkich liter)
dzemeuksis
post 11.05.2007, 23:57:53
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 30.04.2007

Ostrzeżenie: (0%)
-----


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


--------------------
Autorski serwis rozrywkowy, przy tworzeniu którego stawiałem pierwsze kroki w PHP i MySQL: be-bookie
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
webdice
post 12.05.2007, 00:54:06
Post #2


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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.
Go to the top of the page
+Quote Post
dzemeuksis
post 12.05.2007, 09:46:42
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 30.04.2007

Ostrzeżenie: (0%)
-----


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.


--------------------
Autorski serwis rozrywkowy, przy tworzeniu którego stawiałem pierwsze kroki w PHP i MySQL: be-bookie
Go to the top of the page
+Quote Post
Kicok
post 12.05.2007, 12:50:30
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował Kicok 12.05.2007, 12:51:23


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
dzemeuksis
post 12.05.2007, 16:04:35
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 30.04.2007

Ostrzeżenie: (0%)
-----


@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?


--------------------
Autorski serwis rozrywkowy, przy tworzeniu którego stawiałem pierwsze kroki w PHP i MySQL: be-bookie
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 06:48