logo
04.01.2020 09:46
1
Zdravím,

snažím sa nájsť zhodu slova v stringu
preg_match("/\b$village->fullname\b/" , $content)

Text ťahám z DB je obalený <p></p>, vyhadzuje mi chybu
preg_match(): Compilation failed: unmatched closing parenth

a neviem pochopiť kde je chyba.

dik za tipy.

Co se právě děje na Webtrhu?

04.01.2020 10:01
2
preco pouzivas regularny vyraz a nie stripos?
04.01.2020 10:01
3
A proc tu filtraci delas az v php a nenechas si vypsat z db jen ty zaznamy,ktere skutecne chces?
04.01.2020 10:24
4
Původně odeslal node
preco pouzivas regularny vyraz a nie stripos?
Ako mám tomu rozumieť, popíš viac. dik

---------- Příspěvek doplněn 04.01.2020 v 10:24 ----------

Původně odeslal Vít Michalek
A proc tu filtraci delas az v php a nenechas si vypsat z db jen ty zaznamy,ktere skutecne chces?
Lebo na základe zhody prihladzujem článku tágy.
04.01.2020 10:35
5
A proc nemas tagy ulozene rovnou u clanku?
04.01.2020 10:38
6
Původně odeslal Vít Michalek
A proc nemas tagy ulozene rovnou u clanku?
Asi som sa vyjadril nie presne. Tagy nazývam labels, o čom daný článok je (kľúčové slova).
A to sa má robiť cez vyhľadávanie zhody.
04.01.2020 10:41
7
preg_match("/\b\$village->fullname\b/" , $content)

$ je "funkční" znak, proto escape
04.01.2020 10:44
8
Původně odeslal takatom
preg_match("/\b\$village->fullname\b/" , $content)

$ je "funkční" znak, proto escape
Pri niektorých článkov mi to beží bez problémov.
Chyba sa neprejavuje generálne. a neviem na to prísť prečo.
04.01.2020 11:07
9
php - How do I check if a string contains a specific word? - Stack Overflow
04.01.2020 11:07
10
Původně odeslal node
preco pouzivas regularny vyraz a nie stripos?
Už viem prečo nepoužívam stripos. Lebo ti to nájde zhodu aj v časti slova.
Potrebujem zhodu len celého slova.

Teoreticky by som mohol použiť aj stripos ale bo by som musel celú DB
preindexovať od najdlhšieho slova po najkratšie hľadanie. aby začalo hľadať najdlhším výrazom.

Rozmýšľam ako by som zrealizoval reindexáciu DB?
04.01.2020 11:44
11
nemůžeš to preg_match dávat neescapovanou proměnou, může obsahovat řídící znaky a poté ti kód spadne, což se ti asi děje.

PHP kód:
<?php
$keyword 
preg_quote($village->fullname'/');
preg_match("/\b$keyword\b/" $content);
Samozřejmě tohle není ideální postup, regulární dotazy jsou cpu náročné a takhle je musíš počítat při každém načtení stránky, lepší je si tagy/labely připravit dopředu v db nebo si aspoň dopředu vytáhnout klíčová slova, případně je upraví do základního tvaru a poté si k nim můžeš dynamicky přiřazovat tagy/labely na webu, stejně tak se zpracovává text pro fulltextové vyhledávání.
04.01.2020 13:00
12
Ano, TomášX

tak nejako k tomu smerujem.

---------- Příspěvek doplněn 04.01.2020 v 13:13 ----------

Nakoniec som to vyriešil tak,
že vytvoril som novú DB preindexovanú od najdlhšieho výrazu po najkratší.
a prešiel s preg_match na strpos ().
Tým som získal vyššiu kvalitu vyhľadania ako doposiaľ.

dik za pomoc.

Upresnenie čo robia funkcie.
strripos () - Nájde polohu posledného výskytu reťazca v inom reťazci (nerozlišuje veľkosť písmen)
strpos () - Nájde polohu prvého výskytu reťazca v inom reťazci (citlivosť na veľké a malé písmená)
strrpos () - Nájde polohu posledného výskytu reťazca v inom reťazci (citlivosť na veľké a malé písmená)
11.01.2020 12:37
13
Nemůžete dát preg_match s proměnnou bez mezipaměti