Autor | Zpráva | ||
---|---|---|---|
Budry Profil |
#1 · Zasláno: 23. 10. 2013, 22:26:59
Zdravím,
zpracovávám právě větší množství dat, která musím projít a prohnat parserem a upravit na požadovaný tvar, problém je v tom že regulár, který jsem na to dal dohromady je enormě náročný a dostávám error "Segmentation fault" Potřebuji v libovolném stringu obsahujím html najít tuto strukturu: <a class="photo" href="http://example.com/some/image.png" target="_blank"> <img height="98" src="some/image.png" width="130"/> </a> <img height="98" src="/some/image.png" width="130"/> Pokud bych to měl popsat, potřebuji najít všechny tagy <a> s class="photo" a ty nahradit pouze tagem <img> který je uvnitř stím že na začátek src="" se vloží lomítko. Regulár, který se mi podařil dát dohormady: $pattern = '~<a(((?!class="photo").)*)class="photo"([^>]+?)>\s*<img(((?!src).)*)src="([^"]+?)"([^>]+?)>\s*</a>~'; $replace = '<img${4}src="/${6}"${7}>'; $out = preg_replace($pattern, $replace, $text); Regulár funguje přesně jak je potřeba, bohužel se mi nepodařilo dát dohromady nějakou mín náročnou podobu a po chvíli tak celý program spadne s Segmentation fault Mohl by mi někdo poradit jak tento regulár opravit? Popřípadě jak jinak lépe tento problém vyřešit? Předem díky |
||
Tori Profil |
A potřebujete opravdu ověřovat, jestli nebyla stejná třída zadaná dvakrát? Možná by stačilo
$re = '~<a\s+[^>]*?class=(["\'])photo\\1[^>]+?>\s*(<img.*?\s+src=(["\']))/?(.+?)(\\3.*?>)\s*</a>~isu'; $out = preg_replace($re, '$2/$4$5', $text); |
||
Jan Tvrdík Profil |
#3 · Zasláno: 23. 10. 2013, 22:58:35
Budry:
Nevymýšlej blbosti s regulárama a radši na to použij funkce pro práci s DOMem. |
||
Budry Profil |
Jan Tvrdík:
Kruci, to mě nenapadlo... máš pravdu, bude to lepší Dík oboum :-) |
||
Časová prodleva: 12 let
|
0