ForumCała strona

Nawigacja

Aktualnie online

Gości online: 18

Użytkowników online: 0

Łącznie użytkowników: 25,405
Najnowszy użytkownik: kipolas

Logowanie

Nazwa użytkownika

Hasło



Zarejestruj się

Odzyskaj hasło

Shoutbox

Musisz zalogować się, aby móc dodać wiadomość.

Zbigniew@
18.10.2025 19:31:20
Forum nie dziala nawet bez polskich znakow.

JazOOn
16.10.2025 18:21:12
nie dziala z polskimi znakami

Zbigniew@
12.10.2025 15:20:31
Tylko dla wybranych.

JazOOn
06.10.2025 21:00:15
czy shout dziala?

hoopak
02.10.2025 10:33:17
Bleeeeee Cool

Pobierz now? wersj?
Pobierz podr?cznik
Zobacz inne oficjalne Supporty
Statystyki supportu
PHP-Fuson PL na Facebooku

RSS

Polecamy hosting SferaHost.pl

Zobacz temat

 Drukuj temat
[PHP] Funkcja oparta o preg_replace
QooBooS
Witam!
Od jakiego? czasu zajmuj? si? tworzeniem edytora dla ekipy t?umacz?cej. Dzia?a on przez przegl?dark?, jest oparty o PHP i baz? MySQL.
Jak do tej pory wszystko sz?o g?adko i wszystko dzia?a?o bez zarzutu, lecz ostatnio twórcy gry, któr? t?umaczymy, wprowadzili kilka nowych funkcji, poszerzaj?cych mo?liwo?ci t?umacz?cych j? ludzi.
Chodzi tu o sytuacj?, gdy dany przedmiot czy cokolwiek, co jest do przet?umaczenia, mo?e wyst?powa? w liczbie mnogiej. W takiej sytuacji po s?owie odmienianym stawiamy [f:"liczbamnoga"]. Tyczy si? to jedynie s?owa, które poprzedza kwadratowy nawias.
Dzia?a to w ten sposób:
"Jest to przyk?adowy tekst[f:"teksty"] do przet?umaczenia"
Nie b?d? si? rozpisywa? na temat dzia?ania tego rozwi?zania w grze, bo nie o to tu chodzi.
Moim zadaniem jest zrobienie tego samego na stronie internetowej.
Skrypt PHP pobiera z bazy danych wpis, który przyk?adowo wygl?da tak, jak napisa?em wy?ej.
Chcia?bym móc sterowa? czy wy?wietli? liczb? pojedyncz?, czy mnog?. Do tej pory napisa?em taki "wzór" dla funkcji preg_replace, lecz nie dzia?a (pewnie nawali?em w nim wiele zb?dnych rzeczy lub, co gorsza, napisa?em co? zupe?nie ?le).
/^(.*)(\s?)(\S+)(\[f:")?(.+)("\])?(.*)$/e
Niestety nie potrafi? wyja?ni?, dlaczego akurat tak, kierowa?em si? intuicj? :P
Potrzebuj? wzoru, który b?dzie dzia?a? w ka?dej sytuacji, tzn. nawet je?li przed i po s?owie "tekst" (z przyk?adu) nie wyst?puje nic, np.:
"tekst[f:"teksty"]" <-- i koniec
Pisz?c powy?szy wzór chcia?em osi?gn?? co? takiego:
(dowolny tekst lub jego brak)*(spacja lub jej brak)?(tekst bez spacji)(liczba mnoga lub jej brak)*(dowolny tekst lub jego brak)*.
Chcia?bym móc wy?wietli? "tekst", gdy brak odpowiednio sformatowanego kwadratowego nawiasu lub "teksty", gdy ten wyst?puje. Oczywi?cie reszta tekstu, czyli "Jest to przyk?adowy " oraz " do t?umaczenia", powinna pozosta? nienaruszona.
Prosz? o szybk? odpowied? - t?umacze czekaj? :)
Pozdrawiam.

EDIT:
Dla zobrazowania dzia?ania takiej funkcji, napisz? kilka przyk?adów:
//Wyci?ganie liczby mnogiej:
"To jest[f:"s?"] przyk?adowy[f:"przyk?adowe"] tekst[f:"teksty"] do t?umaczenia" -> "To s? przyk?adowe teksty do t?umaczenia"

//Wyci?ganie liczby pojedynczej:
"To jest[f:"s?"] przyk?adowy[f:"przyk?adowe"] tekst[f:"teksty"] do t?umaczenia" -> "To jest przyk?adowy tekst do t?umaczenia"

//Nietypowe sytuacje:
"Tekst[f:"Teksty"]" -> "Teksty" (dla l.mn.) lub "Tekst" (dla l.poj.)

"Tekst do t?umaczenia" -> "Tekst do t?umaczenia" (bez zmian)

"Tekst[f:"Teksty"] do t?umaczenia" -> "Teksty do t?umaczenia"
itd...


PW od moderatora:
  1. Zmiana nazwy tematu - Pieka 10.02 - 21:08

Edytowane przez QooBooS dnia 10.02.2010 21:38:02
 
W?cibski Go??
Dodany dnia 24.10.2025 18:07:07
Pan Kontekstualny

Postów: n^x
Data rejestracji: Zawsze

Polecamy hosting SferaHost.pl
IP: localhost  
Seba0p
Pobierz kod źródłowy  Rozwiń Kod źródłowy
 
http://seba0p.pl
QooBooS
Musz? przyzna?, ?e jestem pod wra?eniem :) No i ogromnie si? ciesz?, ?e jednak t?umaczenie ruszy dalej ;) Serdeczne dzi?ki! :) Uratowa?e? mi ?ycie.
Teraz tylko nurtuje mnie jedna sprawa: jak, do jasnej ciasnej, to dzia?a? W ogóle nie pasuje mi te wzór, który poda?e? :) Nigdy bym w ten sposób go nie napisa?. Jakby? móg? to wyja?nij.

EDIT: Aha, jest jeszcze sprawa rozró?niania znacznika [plur] - informuje on gr?, ?e za chwil? wyst?pi zmienna, któr? trzeba b?dzie potraktowa? w liczbie mnogiej.

Przyk?ad:
"Dzisiaj kupi?em 5 kilo [plur][%dic:STR_DIC_MARCHEW]." -> "Dzisiaj kupi?em 5 kilo marchwi."
[%dic:...] to dla gry informacja, ?e ma wczyta? tekst ze "s?owniczka". W s?owniczku definicja s?owa marchew wygl?da tak:
STR_DIC_MARCHEW = "Marchew[f:"Marchwi"]".
Czyli gra musi wczyta? to, co ju? zrobi?e?.
Wczytanie tej zmiennej ju? mam, chodzi mi o rozró?nianie, czy przy danej definicji stoi [plur] i odpowiednie przekazanie parametru do funkcji, aby ta u?y?a sposobu nr 1 (tego z \\1) lub 2 (tego z \\3).
Pseudokodem:
je?li przy znaczniku [%dic:...] stoi [plur], wykonaj wczytajZeSlownika('zawartosc_tagu_dic', 'lmn'), a je?li nie, wykonaj wczytajZeSlownika('zawartosc_tagu_dic', 'lpoj').
Mo?e by? te tak, ?e funkcja b?dzie dostawa? co? w przypadku wyst?pienia [plur], a w przypadku jego braku ''. Ja to widz? tak: wczytajZeSlownika('\\3', '\\1'), przy czym \\3 to b?dzie zawarto?? tagu dic, a \\1 to zawarto?? tagu plur (je?li go nie ma, to nic tam nie wstawi).
Teraz jeszcze ta druga funkcja i b?dzie z g?owy :)
Edytowane przez QooBooS dnia 11.02.2010 00:15:28
 
Seba0p
Pobierz kod źródłowy  Rozwiń Kod źródłowy



Widz?, ?e edytowa?e? post.


O to Ci teraz chodzi ?

Pobierz kod źródłowy  Rozwiń Kod źródłowy

Edytowane przez Seba0p dnia 11.02.2010 00:35:14
 
http://seba0p.pl
QooBooS
Nie dok?adnie o to mi chodzi?o. By? mo?e ?le wyt?umaczy?em.
Skrypt dostaje jaki? tekst, np.:
$contents = "Dzisiaj kupi?em 5 kilo [plur][%dic:STR_DIC_MARCHEW] w spo?ywczym";
ma za zadanie wyszuka? w ca?ym tym tek?cie pojedynczego [%dic:STR_DIC_MARCHEW], sprawdzi? czy nie poprzedza go [plur] i wywo?a? funkcj? wczytajZeSlownika('STR_DIC_MARCHEW', 'plur'); (lub, je?li nie ma plur'a, drugi parametr ma by? pusty). I tak do ka?dego [%dic:...' z osobna.

Nast?pnie funkcja wczytajZeSlownika($text, $plur); wczytuje z bazy danych wpis ze s?ownika, w którym nazwa='STR_DIC_MARCHEW' (czyli $text).
Z bazy zwracana jest warto?? pola 'nazwa_polska', w którym jest takie co?:
Marchew[f:"Marchwi"]

Nast?pnie funkcja, w zale?no?ci od tego, czy jest plur, czy nie ma, wykonuje:

Pobierz kod źródłowy  GeSHi: PHP
  1. if ($plur == '')
  2. {
  3. //wykonaj preg_replace dla liczby pojedynczej
  4. } else {
  5. //wykonaj preg_replace dla liczby mnogiej
  6. }
Zinterpretowano w sekund: 0.017, wykorzystano GeSHi 1.0.8.10


Jak na razie wykombinowa?em tak (ale nie dzia?a):
Pobierz kod źródłowy  Rozwiń Kod źródłowy


Wiadomo?? doklejona:
No, nareszcie! Twój ostatni post poprawi? mi humor :) Kod, który poda?e?, dzia?a :) Jeszcze raz serdeczne dzi?ki za pomoc! :D
Edytowane przez QooBooS dnia 11.02.2010 00:44:13
 
Seba0p
Jak co?, to troszk? poprawiony Twój:

Pobierz kod źródłowy  Rozwiń Kod źródłowy

Edytowane przez Seba0p dnia 11.02.2010 00:58:29
 
http://seba0p.pl
QooBooS
Dzi?ki, dzi?ki :) Ka?da optymalizacja si? przyda. Teraz przynajmniej wygl?da profesjonalnie :D
Nie spodziewa?em si?, ?e rozwi??? ten problem jeszcze dzi? (nie patrz?c na zegarek), a tu takie mi?e zaskoczenie :) Nie b?d? Ci? ju? spamowa? tymi "pomóg?", bo Ci? za bardzo rozpieszcz? :P
Dzi?ki za pomoc.

Wiadomo?? doklejona:
Witam. Mam kolejny problem. Kolejnym tagiem jest s?owo w zale?no?ci od p?ci, np. zabra?e?[f:"zabra?a?"]. Powinno dzia?a? to, co mi poda?e? do sprawdzania [pl:""], lecz, z niewiadomych przyczyn, nie dzia?a.

W zale?no?ci od podanej w formularzu p?ci (dwa pola typu radio, name='plec', warto?ci m i z.
linijka, która powinna zast?pi? wszystkie tagi wygl?da tak:
Pobierz kod źródłowy  Rozwiń Kod źródłowy


zmienna $contents zawiera przyk?adowo taki tekst:
Wreszcie si? obudzi?e?[f:"obudzi?a?"]!

po wybraniu p?ci m?skiej powinno wy?wietli? "Wreszcie si? obudzi?e?", a w przeciwnym wypadku - "Wreszcie si? obudzi?a?".
Co jest ?le? Cudzys?owy nie s? eskejpowane r?cznie, by? mo?e robi to formularz, wpakowuj?c je do $_POST.

Wiadomo?? doklejona:
Rozwi?za?em problem. Formularz przysy?a? mi \"tekst\" zamiast "tekst". U?y?em stripslashes($tekst) i wszystko gra :)
Edytowane przez QooBooS dnia 11.02.2010 22:14:22
 
Przejdź do forum:
Created by Arox Copyright (C) 2004
Copyright (C) 2004 - 2018 Ekipa PHP-Fusion.pl