如何删除<script
....和... </script>
之间的所有内容?
如果我写:
s = s.replaceAll("<script.+</script>", "");
它会删除第一个<script
到最后一个</script>
之间的所有内容,但我想从第一个<script
中删除,直到第一个</script>
请帮忙
答案 0 :(得分:2)
使用正则表达式来解析HTML通常是一个坏主意 - 有无数的极端情况,要抓住它们需要付出很多努力(如果你的输入是<!-- <script> --> foo <!-- </script> -->
怎么办?) - 但要回答你的问题一个非常具体的问题:将+
,一个尽可能消耗的“贪婪”量词,更改为+?
,这是一个“不情愿”的量词,消耗尽可能少。
请参阅http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html。
答案 1 :(得分:0)
我过去曾建议这样做:
<\s*script.*?(/\s*>|<\s*/\s*script[^>]*>)
根据您的语言或工具使用“单行”或“dotall”编译器开关。
有关详情,请参阅我的回答:https://stackoverflow.com/q/8043367/561690
在回应评论时,我做了一些改动,除了让它更难以成功获得某些东西之外什么都不做。对于<
和script
之间的任何空格 - 在构建解析器时,我不会忽略推荐的那部分(标准?),以使其更灵活,所以我会把它作为我答案的一部分留下来!
答案 2 :(得分:0)
OWASP Java HTML Sanitizer是由OWASP赞助的HTML清理程序,用Java编写,它使用一串HTML和白名单标记和属性来生成一串安全的HTML。
它经历了多轮攻击审查,与AntiSAMY适合相同的利基。
完全披露:我是维护者。