Jump to content
php.lv forumi

RegEx baigi eedeliigs


Axelarge

Recommended Posts

Sveiki.

Kersos pa taisno pie lietas.

Mana skripa dala izskatas sadi:

if( eregi('<link(.*?)>(.*?)</link>', $line) ) {
$links[] = array(
 "href"=>eregi_replace('<link(.*?)href=\"(.*?)\"(.*?)>(.*?)</link>', '\\2', $line),
 "target"=>eregi_replace('!target=\"(.*?)\"!', '\\1', $line),
 "text"=>eregi_replace('<link(.*?)>(.*?)</link>', '\\2', $line),
);
}

Ta jega ir atkodet kautko sadu:

<link target="_new" href="http://">Link1</link>

un, kaa varbut saprotams pieskirt targetu $links[]['target'], utt.

Diemzel si te rindina:

"target"=>eregi_replace('!target=\"(.*?)\"!', '\\1', $line),

ir baigi "greedy" un man izmet maximaali garo variantu, tatad

_new" href="http://

ja es aiz (.*?) ielieku U, tad viss galigi saiet sviestaa un man jebkuraa gadijienaa izmet "Link1" :ph34r:

 

Varbut kads varetu palidzet?

Link to comment
Share on other sites

eregi_replace('!target=\"(.*?)\"!', '\\1', $line)

 

vispār tev nenāktu par ļaunu regulās ekspresijas manuāļus palasīt, jo tā vien liekas, ka pāris lietas tu esi izzīdis no pirksta:

 

! - ko tas nozīmē?

 

šajā gadījumā pirms dubultpēdiņām nav jāliek beksleši, jo strings, kas ir singlepēdiņās netiek parsēts, otrkārts dubultpēdiņas nav regexp īpašais čarakters.

 

(.*?) - arī nav nekas loģisks, jo * nozīmē, ka . var būt 0 līdz bezgalībai garš, bet ? tajā pašā laikā nozīmē, ka tas ir viens čarakters. šajā gadījumā tev ieteiktu lietot (.+).

 

replacements - '\\1' - šeit labāk likt tikaivienu bakslašu, jo kā jau teicu, tad strings parastajās pēdiņās netiek parsēts.

 

galu galā es rakstītsu kautko līdzīgu: eregi_replace('target="([^"]*)"', '\1', $line)

Link to comment
Share on other sites

Hrm, es nezinu cik aizmidzis biju kad raxtiju so skriptu...

Regexos jau taa neko nejeedzu, un veel...

(.*?) es raavu no sejienes

No saakuma centos videjo regexu raxtit ka 1. un 3.o, nesanaca (jo 1. un 3. nav iespejas panemt kautko lieku), bet protams ar to nesanaca un tad saku sviestoties.

Es jau mekleju palidzibu dazados irc chanos bet neviens nevareja palidzet.

 

Tapec liels paldies :)

 

EDIT:

Skripts workoja ari pectam kad izlaboju savu galveno (loti debilo) kludu ar backslashiem

rindina izskatas shadi:

"target"=>eregi_replace('<link(.*?)target="(.*?)"(.*?)>(.*?)</link>', '\2', $line),

Edited by Axelarge
Link to comment
Share on other sites

×
×
  • Create New...