Jump to content
php.lv forumi

preg_replace neatgriež neko


martins256

Recommended Posts

Gribēu uztaisīt funkciju, kas html failā, vadoties pēc tagiem, kādā vietā kaut ko aizvieto. Funkcijai tiek padoti tagi un teksts kas jāliek iekšā. Taisīju tā, ka var tikt padoti vairāki tagi, jo tak html arī var būt vairākās vietās "<ul>"... Diemžēl viss nestrādā kā nākas.

 

PHP 5.2.4

 

pati funkcija:

http://paste.php.lv/6479

 

izpildot

inner_add(array('div','p'),'asd'); viss notiek

inner_add(array('div','div','div','div'),'asd'); notiek

inner_add(array('kreisais_tag'),'asd'); notiek // tāda taga kodā nav!

inner_add(array('div','div','p'),'asd'); nenotiek //preg_replace apēd visu, errori nav, darbība var notikt tālāk....

 

esmu tiešām nesaprašanā kur tā kļūda...

 

 

šādi izskatās tie $regex un $replace

#<div(.*?)>(.*?)<div(.*?)>(.*?)<div(.*?)>(.*?)<div(.*?)>(.*?)(.*?)</div>(.*?)</div>(.*?)</div>(.*?)</div>#is
<div${1}>${2}<div${3}>${4}<div${5}>${6}<div${7}>${8}asd${9}</div>${10}</div>${11}</div>${12}</div>

#<div(.*?)>(.*?)<p(.*?)>(.*?)(.*?)</p>(.*?)</div>#is
<div${1}>${2}<p${3}>${4}asd${5}</p>${6}</div>

Link to comment
Share on other sites

Pēc šī raksta sanāk, ka es pārāk daudz izmantoju .*?, kas bremzē visu padarīšanu un, pēc manām domām, preg replace notiek kkāds timeout... .*? The reason to any slow regex!

 

Ja es norādu kā parametru, cik reizes vajag aizvietot, tad viss notiek kā tam būtu jābūt (ja norādu 4, kas ir max, notiek. ar 5 vairs nesanāk).

 

Piemēram, Regular Expression Test Tool un arī offline testeris strādā kā vajag(kad taisa to replace, iesēžas gan uz pāris sec.)

 

Tātad jābūt kaut kādam risinājumam...

Varbūt tos .*? var aizvietot ar ko citu, kas neprasītu tik daudz resursu?

vai kkā mēģināt skaitīt tās reizes, cik sanāk?

Link to comment
Share on other sites

×
×
  • Create New...