[ pakito @ 04.10.2021. 11:15 ] @
Akcentovano mesto u rečima u tekstu rečnika, vršim tako što akcentovan vokal boldiram.

primer:
$nadji = "lukra";
$zamenisa = "l<b>u</b>kra";
Problem nastaje kod dužih reči koje imaju istu osnovu, ali im je akcenat na drugom vokalu, primer:
$nadji = "lukratuare";
akcenat je na drugom "a": "lukratu<b>a<b/>re";
Ako odradim oba primera, dobijam reč tipa "lukratuare" sa dva akcenta!
A reči imam preko 100 000!

Pitanje, kako da prepravim ovaj primer da mi se to ne događa, to jest da mi '$nadji' nadje tačno string koji sam zadao, a ne duži od njega:

Code:
$unos="UPDATE `$tabela` SET `$polje` = replace(`$polje`,'$nadji', '$zamenisa')";

[ djoka_l @ 04.10.2021. 11:59 ] @
Uh, ovo je tako loše...

Prvo, pitanje nije za PHP nego za (pretpostavljam) MySQL bazu.
Drugo, ne znaš SQL, zašto replace, kada zamebjuješ CELU reč drugim stringom?

$unos="UPDATE `$tabela` SET `$polje` = '$zamenisa' WHERE `$polje` = '$nadji'";

Uz pretpostavku da je polje indeksirano, gornji upit je 100.000 puta brži.

Treće: čestitam! Uspeo si da isprogramiraš SQL Injections!
[ pakito @ 04.10.2021. 12:19 ] @
Nisam siguran da ste najbolje rezumeli problem.
$polje u $tabeli nema samo jedan string, nego je u pitanju tekst u kome se, preko primera, definiše i objašnjava osnovna reč u rečniku.
To dalje znači da se NE ZAMENJUJE ceo sadržaj $polje, nego samo jedna, tačno određena reč u njemu ...
Drugo, nisam ja smislio ovaj način višestruke zamene, nego sam ga preuzeo iz stručne literature.
Pema tome, čestitke zaslužuju neki drugi ... :)
Treće. Isprobao sam vaš primer: ne deluje ni na jednu reč, ni na onu koja se potpuno poklapa sa $nadji, ni na druge koje su duže ...


[ djoka_l @ 04.10.2021. 13:12 ] @
Ovo me stvarno demorališe.
Imaš 100.000 reči i želiš na 100.000 mesta da proveriš da li se neka od 100.000 reči pojavljuje i onda uradiš neku zamenu. To znači 10 milijardi update komandi.
A, pri tome je upitno da li uopšte treba da radiš zamenu u bazi, ili samo prilikom ispisa na ekran.
Pri tom ne daješ iole kompletan primer o tome šta imaš i šta želiš da dobiješ.

Evo reši na glup način.
Kada dobiješ u nizu zamena od "l<b>u</b>kratu<b>a<b/>re", dodaj još jedno pravilo, da se "l<b>u</b>kratu<b>a<b/>re" zamenjuje sa "lukratu<b>a<b/>re"
[ pakito @ 04.10.2021. 14:40 ] @
Citat:
Evo reši na glup način.


To već radim, samo sa očekivao da neko na ES zna pametniji način!
[ pakito @ 05.10.2021. 17:28 ] @
Po svemu sudeći, rešenje je bilo više nego jednostavno, i glasi ovako:

Code:
$unos="UPDATE `$tabela` SET `$polje` = replace(`$polje`,' $nadji ', ' $zamenisa ')";


Stringovima se prosto doda po jedno prazno polje sa obe strane, pošto je u pitanju običan tekst u kome su reči tako i razdvojene. Treba samo imati u vidu da reč sa desne strane nema uvek prazno polje, već zarez, pa se lako daju isprogramirati zamene u "dva prolaza", prvim bez zareza, a drugi sa zarezom, pošto u tekstu rečnika nema drugih znakova interpunkcije!

Vidimo se na http://www.paundurlic.com/vlaski.recnik/index.php
[ VladaSu @ 06.10.2021. 14:13 ] @
Postoji i MySQL funkcija REGEXP_REPLACE
[ djoka_l @ 06.10.2021. 14:26 ] @
Postoji, ali u verziji 8, u prethodnim verzijama MySQL-a nije postojala.