请达人看看这个正则表达式对不对 我想删除掉HTML中的javascript的元素,所以我自己分析了下javascript的语法一般是是这样<script language="java">function dosomething()</script>,因此,我自己写了一个正则表达式来一般表示它;<script[\s]*[^<|^>]*>.*</script>,请问下,这有问题吗?我用它来过滤javascript元素的时候没有成功。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接这样试试<script.*?</script> 你要得到的是什么内容?function dosomething() 吗? 我要将javascript的内容从html源码中去掉,我用正则式来过滤 怪事~大家顺便帮我看看我在接答上面的楼主的时候 写了1楼的正则表达式 是可以匹配<script></script>的内容的可是在删除的时候 却出现问题了 好怪 帮忙看看^_^package lee;import java.util.regex.*;public class Test1 { public static void main(String[] args) { String s="ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd"; String regex="<script.*?</script>"; Pattern pt=Pattern.compile(regex); Matcher mt=pt.matcher(s); if(mt.find()) { System.out.println(mt.group(0)); String s2=mt.group(0); String s3=s.replaceAll(s2, ""); System.out.println(s3); } } }运行后上面的输出为:<script language="java">function dosomething() </script>ddfadfasdf<script language="java">function dosomething() </script>ddddd也就是说 脚本居然没有被删除掉~! public class Test1 { public static void main(String[] args) { String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd"; String regex = "<script.*?</script>"; String str = s.replaceAll(regex, ""); System.out.println(str); }} public class Test1 { public static void main(String[] args) { String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd"; String regex = "(.*)(<script.*>.*</script>)(.*)"; Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); Matcher matcher = pattern.matcher(s); String result = s; if (matcher.matches()) { result = matcher.group(1); result = result + matcher.group(3); } System.out.println(result); }}这样就行了。 String regex = "<script.*?</script>";6楼正解,没什么好说的,呵呵 String 的repaceAll 方法签名: public String replaceAll(String regex,String replacement) 参数: regex - 用来匹配此字符串的正则表达式 也就是说它把你给的s2当作正则表达式做了解析。出错的地方就在那对()String regex = "<script language=\"java\">function dosomething\\(\\) </script>"; package testfile;import java.util.regex.*;public class ATest { public static void main(String[] args){ String s="<script language=\"java\">function dosomething() </script>,因此,我自己写了一个正则表达式来一般表示它;"; String regex="(<script.*?</script>)"; Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE|Pattern.DOTALL); Matcher matcher = pattern.matcher(s); while(matcher.find()){ System.out.println(matcher.group(1)); s=s.replace(matcher.group(1),""); System.out.println(s); } }}我比较菜,不知道这个是不是你想要的结果, package testfile;import java.util.regex.*;public class ATest { public static void main(String[] args){ String s="<script language=\"java\">function dosomething() </script>,因此,我自己写了一个正则表达式来一般表示它;"; String regex="(<script.*?</script>)";//过滤包括标签及标签里的内容 String regex2="(<script[^>]*>[^<]*</script>)";//过滤包括标签及标签里的内容 String regex3="<script[^>]*>([^<]*)</script>";//只过滤标签里的内容 Pattern pattern = Pattern.compile(regex3,Pattern.CASE_INSENSITIVE|Pattern.DOTALL); Matcher matcher = pattern.matcher(s); while(matcher.find()){ System.out.println(matcher.group(1)); s=s.replace(matcher.group(1),""); System.out.println(s); } }} public static void main(String[] args) throws ParseException { String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd"; String regex = "<script.*?</script>"; Pattern pt = Pattern.compile(regex); Matcher mt = pt.matcher(s); if (mt.find()) { System.out.println(mt.group()); String s2 = mt.group(); String s3 = s.replaceAll( regex,//这里~!改了 ""); System.out.println(s3); } } 回zhuche110,我发现一个问题,如果字符串里面出现\r \n的话用 .是不能表示它们的,我做过试验,也就是说对于正则式<script.*? </script>,只要出现\r\n那么就无法匹配了。所以要用的时候要先用\s+去掉这种字符。另外我问一个问题,你的正则式简洁,但是为什么中间有一个?呢,是用来修饰.*的吗? 还有我的正则式有错误的地方吗? public static void main(String[] args) throws ParseException { String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd"; String regex = "<script.*?</script>"; Pattern pt = Pattern.compile(regex,Pattern.DOTALL);//这个模式就可以了。.可以匹配任何的! Matcher mt = pt.matcher(s); if (mt.find()) { System.out.println(mt.group()); String s2 = mt.group(); String s3 = s.replaceAll( regex, ""); System.out.println(s3); } } 菜鸟得问题,关于加减乘除号的输入(急切)!!!!!! 在线急等===== 一个小知识。 点击按钮播放声音文件! JMenu的问题~` 如何使SimpleDateFormat("MMM dd hh:mm")函数显示的月份不为中文???? 大家帮忙看看怎样才能提高效率,急! IO的问题,请高手帮忙看看!非常感谢! 用java3D,怎样画出一个一直函数的图形呢??急急急!!! 有关VisualAge 请问JAVA中删除目录用什么类和函数?(通用做法) .java 编译成.class的一个问题 DecimalFormat取值问题
<script.*?</script>
function dosomething() 吗?
我在接答上面的楼主的时候 写了1楼的正则表达式 是可以匹配<script></script>的内容的
可是在删除的时候 却出现问题了 好怪 帮忙看看^_^package lee;
import java.util.regex.*;
public class Test1
{
public static void main(String[] args)
{
String s="ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
String regex="<script.*?</script>";
Pattern pt=Pattern.compile(regex);
Matcher mt=pt.matcher(s);
if(mt.find())
{
System.out.println(mt.group(0));
String s2=mt.group(0);
String s3=s.replaceAll(s2, "");
System.out.println(s3);
}
}
}
运行后上面的输出为:
<script language="java">function dosomething() </script>
ddfadfasdf<script language="java">function dosomething() </script>ddddd
也就是说 脚本居然没有被删除掉~!
public class Test1 {
public static void main(String[] args) {
String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
String regex = "<script.*?</script>";
String str = s.replaceAll(regex, "");
System.out.println(str);
}
}
public static void main(String[] args) {
String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
String regex = "(.*)(<script.*>.*</script>)(.*)";
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(s);
String result = s;
if (matcher.matches()) {
result = matcher.group(1);
result = result + matcher.group(3);
}
System.out.println(result);
}
}这样就行了。
6楼正解,没什么好说的,呵呵
参数:
regex - 用来匹配此字符串的正则表达式 也就是说它把你给的s2当作正则表达式做了解析。
出错的地方就在那对()String regex = "<script language=\"java\">function dosomething\\(\\) </script>";
import java.util.regex.*;
public class ATest {
public static void main(String[] args){
String s="<script language=\"java\">function dosomething() </script>,因此,我自己写了一个正则表达式来一般表示它;";
String regex="(<script.*?</script>)";
Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
Matcher matcher = pattern.matcher(s);
while(matcher.find()){
System.out.println(matcher.group(1));
s=s.replace(matcher.group(1),"");
System.out.println(s);
}
}
}
我比较菜,不知道这个是不是你想要的结果,
import java.util.regex.*;
public class ATest {
public static void main(String[] args){
String s="<script language=\"java\">function dosomething() </script>,因此,我自己写了一个正则表达式来一般表示它;";
String regex="(<script.*?</script>)";//过滤包括标签及标签里的内容
String regex2="(<script[^>]*>[^<]*</script>)";//过滤包括标签及标签里的内容
String regex3="<script[^>]*>([^<]*)</script>";//只过滤标签里的内容
Pattern pattern = Pattern.compile(regex3,Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
Matcher matcher = pattern.matcher(s);
while(matcher.find()){
System.out.println(matcher.group(1));
s=s.replace(matcher.group(1),"");
System.out.println(s);
}
}
}
String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
String regex = "<script.*?</script>";
Pattern pt = Pattern.compile(regex);
Matcher mt = pt.matcher(s);
if (mt.find()) {
System.out.println(mt.group());
String s2 = mt.group();
String s3 = s.replaceAll(
regex,//这里~!改了
"");
System.out.println(s3);
}
}
另外我问一个问题,你的正则式简洁,但是为什么中间有一个?呢,是用来修饰.*的吗? 还有我的正则式有错误的地方吗?
String s = "ddfadfasdf<script language=\"java\">function dosomething() </script>ddddd";
String regex = "<script.*?</script>";
Pattern pt = Pattern.compile(regex,Pattern.DOTALL);//这个模式就可以了。.可以匹配任何的!
Matcher mt = pt.matcher(s);
if (mt.find()) {
System.out.println(mt.group());
String s2 = mt.group();
String s3 = s.replaceAll(
regex,
"");
System.out.println(s3);
}
}