Jump to content
php.lv forumi

PHP Search


Gosha

Recommended Posts

Uztaisīju nelielu meklēšanu sava web-lapiņā:

 

1.MySQL SELECT bla bla FROM bla bla LIKE "%key%"

2.Pārbaudīt vai meklējamais vārds ir tekstā - strstr(strip_tags($text),$key)

3.Tālāk gribu iezīmēt "key" ar kādu krasu un sākas

Piem: meklējamais vārds sakrit ar bildes nosaukumu un rezultātā iegūstam:

<img src="<font style="color:yellow">key"/>

 

Tātad jautājums ir šāds: kā iezīmēt nepieciešamo vārdu un naiztikt HTML tagus?

Variants ar strip_tags neder, jo tomēr gribas saglabāt oriģinālo formatējumu

Link to comment
Share on other sites

> 2.Pārbaudīt vai meklējamais vārds ir tekstā - strstr(strip_tags($text),$key)

Jā kaut kur pa ceļam connection aprāvās ;)

 

Augstākminētā koda vietā es izmantotu

if (!strpos(strip_tags($text),$key)===false)

vienkārši optimizācijas pēc, jo strstr atgriež veselu stringa gabalu (resp. tas var būt xxKb teksts, kurā pēdējais vārds ir meklējamais), bet strpos - pirmo pozīciju (vai false, ja netika atrasts, bet jāuzmanās, jo pozīcija var būt 0-tā, tāpēc ===)

 

Vispārējā veidā tekstu starp tagiem meklētu ar regulāro izteikumu, līdzīgu šitam gabalam [nav mēģināts, jo parasti tekstu arī neiezīmēju]:

/\<[^>]+\>(.*)(\<\/[^>]+\>|\<[^>]+\>)/sm

* teksta gabals, kas sākas ar < un tam seko vismaz viens burts, pēc tam >, pēc kura "teksts starp tagiem", un tags tiek vai nu aizvērts - </ kuram seko vismaz viens burts, tad seko > - vai tiek atvērts jauns tags (lai iegūtu arī tekstu no <option...>teksts <option...> u.l.); teksts starp tagiem var būt vairākās līnijās *

 

Pamainot to uz kaut ko līdzīgu

'/\<[^>]+\>(.*)('.$meklejamais teksts.')(.*)(\<\/[^>]+\>|\<[^>]+\>)/ism'

varam izmantot nomainīšanu, kas saglabā arī atrastā teksta keisu (case, piemirsās tas lv vārds) preg_replace($preg,'\\1<b>\\2</b>\\3') (of course, te jautājums par tekstu, kas sakrīt, bet atkārtojas vairākkārt, droši vien jāizmanto /U vai jāpiedomā klāt str_replace preg_replace-am kā otro parametru)

 

Pregu var izmantot arī MySQL pieprasījumā, jo MySQLam ir tāda fiška kā SELECT ... WHERE `kolonna` REGEXP 'reg.izteiksme', resp. var uzreiz atlasīt tikai tādas kolonnas, kur teksts ir "starp tagiem" un mazināt slodzi, ja kāds searchā ievada "href"

Link to comment
Share on other sites

  • 6 months later...
×
×
  • Create New...