PDA

Pogčedajte punu verziju : Regex: Match html tag-a sa klasom


_eW
04. 08. 2010., 06:40
Potrebna pomoć sa regular expression-om...

Hoću da selektujem kompletan tag, u ovom slučaju link tag (a), ali samo određene klase:
<a class="someclass" href="http://www.google.rs">Anchor text</a>

Dakle, potreban je kompletan match, ali samo klase "someclass".

Puno hvala! :1002:

srdjevic
04. 08. 2010., 09:23
Imas ludu srecu da upravo pisem liniju za projekat vrlo slicnu ovoj koja tebi treba...
Ova moja zamenjuje textarea tag u pre, radi za moj slucaj:

$str = preg_replace('/<textarea class="brush"([^>]*)>([^<]*)<\/textarea>/', '<pre class="brush"$1>$2</pre>', $str);


Ti ces verovatno morati da je menjas, ali sad bar imas od cega da pocnes. ;)

eraser
04. 08. 2010., 09:53
Probaj ovako nesto
preg_match_all("/<a class="someclass" href=[\"\']?([^>\s\"\']+)[>\s\"\']/iUs", $lines, $matches);

ivanhoe
04. 08. 2010., 16:26
mozes ovako, da ne razmisljas o redosledu atributa, i da li se koristi " ili ' oko imena klase:

$class = 'foo';
preg_match("|<a [^>]*class=(['\"])$class\\1[^>]*>.+?</a>|is", $txt, $match);


ili sa preg_match_all() ako ima vise linkova...

_eW
04. 08. 2010., 22:47
Hvala puno, momci!

U međuvremenu sam uspeo da se snađem, mada će mi ovi regex dobro doći, pre ili kasnije...

Neku put su rešenja trivijalna i čovek sam sebe ukopa...
Imam sam sreću da su svi linkovi konzistentno "klasirani" tako da mi je i "jeftinija" varijanta završila posao:
<a class="someclass".*<\/a>

Thx!

eclipse
13. 02. 2011., 20:11
da ne otvaram novu temu, a pitanje je prejednostavno samo ne mogu nigdje naći odgovor.

šta znači znak # u ovakvom nizu: preg_replace('#[_ ]#'), '-', $string);

dinke
13. 02. 2011., 20:15
To je delimiter, po defaultu ljudi koriste slash (/) ali mozes koristiti i druge karaktere poput # u tvom primeru. Dakle isto bi bilo i :

preg_replace('/[_ ]/'), '-', $string);

eclipse
13. 02. 2011., 20:19
ok, hvala na instant odgovoru

webarto
13. 02. 2011., 20:21
Isto što i...

preg_replace('/[_ ]/', '-', $string);

Delimiter.

Da bi mogao dodati flags poslije toga recimo

preg_replace('#[_ ]#is'...

Mislim da imaš zagradu viška :)

edit: dinke je brži :)