Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zaawansowane wyrażenia w preg_replace
LamaMASTER
post 21.06.2006, 19:51:33
Post #1





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Witam,
Stworzyłem sobie skrypt, który sprawdza błędy popełniane przez użytkowników na moim forum, poprawia je i zaznacza co zrobili źle (potem mogą zedytować posta i poprawić, żeby sprawdzacz już się nie rzucał). Rozwijam sprawdzacza i rozwijam i w końcu stoję w miejscu. Chciałbym pozbyć ludzi nawyku używania dwóch pytajników (debilny pomysł twórców GG zrobił z internetu syf). Przykładowo:
- Jak się nazywasz??
ma poprawić na:
- Jak się nazywasz?
gdzie pytajnik będzie na czerwono czy coś (to sobie zrobię). To jest banał - prosta regułka w str_replace. Chciałbym jednak do tego użyć preg_replace tak, aby poprawiał tylko dwa wykrzykniki, a jeżeli jest ich więcej to zostawił w spokoju. Np.:
- Jak się nazywasz??
na:
- Jak się nazywasz?
a:
- Co ty gadasz?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?
zostawiał jak jest.
Niestety w powyższym przykładzie zamienia po dwa pytajniki po kolei. Wymyśliłem tak, żeby zamieniał tylko pytajniki ze spacją na końcu - było OK, ale nie zawsze user stawia spację po pytaniu, dlatego to też się nie sprawdza.

Druga rzecz - chciałbym dzięki preg_replace ustawić wstawianie przecinków przed "że" automatycznie. Przykład:
- Myślę że blablabla
zamienia na:
- Myślę, że blablabla
Też niby proste:
preg_replace("#(*.?)że(*.?)#si", '\\1, że \\2' ...
No dobra, ale wtedy jak user już wstawił przecinek:
- Myślę, że blablabla
to w wyniku mam:
- Myślę,, że blablabla

Z góry dzięki za pomoc.
Go to the top of the page
+Quote Post
dyktek
post 21.06.2006, 21:17:26
Post #2





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

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


  1. <?php
  2. if(preg_match(wykryj czy jest przecinek przez że))
  3. preg_replace("#(*.?)że(*.?)#si", '1, że 2'
  4. ?>


?
Go to the top of the page
+Quote Post
ave
post 21.06.2006, 21:28:05
Post #3





Grupa: Zarejestrowani
Postów: 117
Pomógł: 2
Dołączył: 29.01.2004
Skąd: Rz-ów

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


dyktek ale pomagasz ohmy.gif

co do 1 to
  1. <?php
  2. echo preg_replace('!(??){2}!','?',$zdanie);
  3. ?>

powinno dzialac
Go to the top of the page
+Quote Post
siemakuba
post 21.06.2006, 21:38:18
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


a co do 2:
  1. <?php
  2. $str = "myślę że tak działa i, że jest OK";
  3. $str = preg_replace('/([^,])?+(s)(że)(s)/i', '1,234', $str);
  4.  
  5. // wynik: myślę, że tak działa i, że jest OK
  6. ?>


pozdr.
Go to the top of the page
+Quote Post
dr_bonzo
post 21.06.2006, 22:05:01
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


/[^!]([!]{2})[^!]/
powinno zlapac dwa wykrzykniki a wokol nich po jednym znaku nie bedacym wykrzyknmikiem.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
LamaMASTER
post 22.06.2006, 11:05:02
Post #6





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Wielkie dzięki.
Teraz dalszy problem - co jeżeli ktoś napisze "Uważam tak, mimo że blablabla" - to jest poprawnie napisane, a skrypt wstawi przecinek przed "że" smile.gif Da się wstawić jakieś wyjątki? W najgorszym wypadku będę musiał z tego zrezygnować.
Go to the top of the page
+Quote Post
dr_bonzo
post 22.06.2006, 11:31:26
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Moim zdaniem wyciagasz dzialo na muche -- po co ci taki system i tak wsyzstkiego nie wylapiesz, taki Office pisany pewnie przez setke ludzi nie poradzi sobie z wszystkimi przypadkami, a co dopiero twoj pisany w pojedynke z podstawowymi umiejetnosciami. Userzy i tak beda pisac niepoprawnie.

Cytat
Chciałbym pozbyć ludzi nawyku używania dwóch pytajników (debilny pomysł twórców GG zrobił z internetu syf)
- Jak się nazywasz??
ma poprawić na:
- Jak się nazywasz?


To ich niczego nie nauczy -- wpisza blednie, system to zaakceptuje i poprawi a user zobaczy (lub nawet nie zwroci na to uwagi) poprawna wersje i nie zrozumie ze ma pisac poprawnie; skuteczniejszy bedzie chyba "ban za questionmark.gif".
Moja rada: lepiej zajmij sie funkcjonalnoscia systemu a nie taka pierdola co zajmuje kupe czasu, jest trudna a efekty beda pewnie mizerne, ale decyzja nalezy do ciebie.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
LamaMASTER
post 22.06.2006, 14:18:53
Post #8





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


No masz rację. Jednak mój skrypt działa tak, że raportuje jak ktoś zrobi questionmark.gif to ma tak:
? [Auto sprawdzacz: złamano punkt regulaminu nr. jakiś tam] i ten napis jest tak oczojebny, że user musi poprawić post smile.gif
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: 9.07.2025 - 04:32