Portál AbcLinuxu, 27. července 2025 20:33


Dotaz: Vypsani textu mezi HTML tagy regularnim vyrazem

12.11.2008 00:07 zdenek2008 | skóre: 26
Vypsani textu mezi HTML tagy regularnim vyrazem
Přečteno: 287×
Odpovědět | Admin
Docela jsem se zamotal v regularnich vyrazech s takovymhle problemem: z html zdrojoveho kodu si chci php skriptem vytahnout text, ktery se nachazi mezi dvema urcitymi sekvencemi textu, napr.

"Na severovychode bude SLUNECNO A BEZVETRI zatimco na zapade bude prset."

Me zajimaji pouze slova

SLUNECNO A BEZVETRI

a to pouze v pripade ze se v textu nachazeji prave po slovech

"Na severovychode bude"

a pred slovy

"zatimco na zapade bude prset."

Slova SLUNECNO A BEZVETRI mohou byt kazdy den jina, ale pokazde jsou jen na tomto miste. Jinde v textu me hledana slova nezajimaji. Je snadne najit text vcetne techto sekvenci pred a po pozadovanem textu, cili "na severovychode bude SLUNECNO A BEZVETRI zatimco na zapade bude prset", ale ja chci jen ten text mezi nimi. Takze idealni prikaz zni "vyhledej cokoliv mezi textem x a textem y" Da se to udelat primo regularnim vyrazem a nebo musim kostrbate nejdriv z textu vytahnout vse a potom to postupne dalsimi regularnimi vyrazy a textovymi funkcemi php orezat az na pozadovany text?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.11.2008 00:53 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Vypsani textu mezi HTML tagy regularnim vyrazem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Niečo ako "/x(.*?)y/ms" nefunguje (prípadne bez m a/alebo s podľa toho, čo presne to má robiť)? Je možné, že namiesto akéhokoľvek znaku sa to bude musieť nejako obmedziť, ale to záleží od vstupných údajov (možno bude stačiť [^<] a možno bude potrebné niečo úplne iné).

Inak pomocou funkcií na hľadanie reťazcov by to bolo pravdepodobne rýchlejšie.
12.11.2008 12:27 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: Vypsani textu mezi HTML tagy regularnim vyrazem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslis neco takovyhleho:
preg_match("/Na severovychode bude (.*) zatimco na zapade bude prset./", "nejaky text ... Na severovychode bude SLUNECNO A BEZVETRI zatimco na zapade bude prset. ... dalsi text", $matches);
print_r($matches);

 ==>

Array
(
    [0] => Na severovychode bude SLUNECNO A BEZVETRI zatimco na zapade bude prset.
    [1] => SLUNECNO A BEZVETRI
)
12.11.2008 14:52 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Vypsani textu mezi HTML tagy regularnim vyrazem
Problém nastane, ak tam bude viac krát ten prvý, alebo druhý text, prípadne vtedy, keď to nebude v jednom riadku.
12.11.2008 16:28 zdenek2008 | skóre: 26
Rozbalit Rozbalit vše Re: Vypsani textu mezi HTML tagy regularnim vyrazem
Tohle je presne ono. Funkci preg_match jsem to vcera zacal resit, ale pak jsem se zamotal prave s tim regularnim vyrazem pouzitym v parametrech te funkce a pritom jsem si neuvedomil, ze ta funkce vraci pole s uz "vykousnutym" vysledkem. Takze to funguje a diky vsem za tipy.

Problemy se vselijakymi opakovanymi vyskyty hledanych frazi urcite prijdou, navic bude dochazet ke neocekavanym zmenam v prohledavanych html souborech, problemum s nacitanim zdrojovych souboru po siti apod, takze bude jeste hodne ladeni...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.