Mám problém s regulárními výrazy. Potřebuju udělat skript, který by z textu (zdrojový kód nějaké www stránky) odstranil tagy <script></script> a všechno, co je uvnitř.
Když zadám reg. výraz "<script[^>]*>.*</script>", tak to smaže všechno, co je mezi prvním "<script>" a posledním "</script>" ve zdrojáku. Takže pokud mám na stránce víc skriptů a mezi nimi nějaké to HTML, tak o tohle HTML prostě přijdu.
Podle mě by se to dalo řešit tak, že bych nějak řekl, že nechci úplně libovolné znaky (to je to ".*" ve výrazu), ale že se v tomto úseku nesmí vyskytovat výraz "</script>". Jenže nevím, jak na to... :-( Zkoušel jsem něco jako (^(</script>))*, ale nefungovalo mi to.
Nevíte někdo, co s tím?
try this :
<script[^>]*>([^<]{1}[^/]{1})*([^<]?)</script>
Díky, ale tohle bohužel funguje jenom napůl. Neporadí si to s Javascriptama, uvnitř kterých je "<" (což je docela často - při porovnávání). Taky to nezvládá HTML komentáře uvnitř skriptů (a ty se tam používají docela často - kvůli nižším prohlížečům).
tak to se nedá svítit.. Fakt nevím.
leda takhle:
<script[^>]*>(([^</]*)((<[^/]{1})|(/[^<]{1}))([^</]*))*</script>
todle by snad jít mělo...
Nevím, zkouším to, ale pořád mi to nějak nejde (aspoň ne tak, jak bych čekal).
Ale vyřešil jsem to jinak. Nahradím "</script>" jedním znakem (třeba §), který ale předtím z dokumentu odstraním (jde mi totiž stejně jenom o text, takže tento znak by pro mě neměl význam). A vyloučit jeden znak reg. výrazem už není problém.
V každým případě díky za pomoc.