初学正则,请一解,很简单的字符串,谢谢了~~

zhl1015 2009-09-03 08:30:40
String str = "<script>aaaaaaaaa</SCRIPT>111<SCRIPT>bbbbbbbbbb</script>222";

请问怎么replace才能把两个<script>去掉呢,最后只留下:111222

初学,呵呵~~
...全文
244 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhl1015 的回复:]
看了那两个帖子,我也有个同问:(?:aaaa|bbbb)和(aaaa|bbbb)有什么区别呢?
[/Quote]

有区别:

1,正则表达式中凡是以 ( 开头,并且后面一个字符不是 ? 的,且与 ) 配对,这时称括号括起来的为“捕获组”
2,正则表达式中凡是以 (? 开头,且与 ) 配对,这时称为“非捕获组”
3,捕获组在匹配完成后会在内存中保留,保留的目的是为了反向引用。而非捕获组仅仅作为单纯的组,在匹配完成后就扔掉,并不在内存中保留

最佳实践:

如果不需要进行反向引用时,使用非捕获组结构,这样可以降低内存占用。
kaishiyouxi 2009-09-04
  • 打赏
  • 举报
回复
xuexi
zhl1015 2009-09-04
  • 打赏
  • 举报
回复
我这帖子有价值了~~呵呵,里面好多知识点,也谢谢各位,我现在有点喜欢上正则的思考了,呵呵~~
猿敲月下码 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bigbug9002 的回复:]
引用 5 楼 bao110908 的回复:

你这个问题比上面那个帖子还要简单很多:

Java codepublicclass Test {publicstaticvoid main(String[] args) {       
        String str=" <script>aaaaaaaaa </SCRIPT>111 <SCRIPT>bbbbbbbbbb </script> 222";
        str= str.replaceAll("(?is)\\s* <script>.*? </script>\\s*","");
        System.out.println(str);
    }
}


给说一下(?s)好吗?
[/Quote]
thinking in java 中有写到:
(?s)Pattern.DOTALL
在dotall模式下,表达式'.'匹配所有字符,包括行终结符,缺省情况下'.'不匹配行终结符

使用时可以直接写在正则表达式中 (?s)
也可以这样写:
Matcher m = Pattern.compile("\\d+",Pattern.DOTALL).matcher(s);
  • 打赏
  • 举报
回复
[aaa|bbb] 我不知道你在哪里看到这么写的,如果是真看到的话,这个就不懂正则表达式。

[ ] 称为字符组,表示匹配其中每个字符中的任何一个

[aaa|bbb] 与 [a|b] 一模一样,表示能匹配字母 a 或者字母 b 或者竖线 |
zhl1015 2009-09-04
  • 打赏
  • 举报
回复
哦,明白了~

可有时看到的表达式里,好象也有用[]分组的,比如[aaa|bbb]这方括号和圆括号有什么区别呢?
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zhl1015 的回复:]
在问下,(?:aaaa|bbbb)这里 ? 后面的 : 冒号有什么用呢?
[/Quote]

没什么作用,仅仅是个非捕获组的标记
xuyesheng 2009-09-04
  • 打赏
  • 举报
回复
去我博客看看字符串详解http://blog.sina.com.cn/bjxuyesheng
zhl1015 2009-09-04
  • 打赏
  • 举报
回复
在问下,(?:aaaa|bbbb)这里 ? 后面的 : 冒号有什么用呢?
zhl1015 2009-09-03
  • 打赏
  • 举报
回复
看了那两个帖子,我也有个同问:(?:aaaa|bbbb)和(aaaa|bbbb)有什么区别呢?
bigbug9002 2009-09-03
  • 打赏
  • 举报
回复
火龙果的那两个贴子以前就看过,刚才又看了一遍,还有一些地方不是太明白.改天再讨教.
zhl1015 2009-09-03
  • 打赏
  • 举报
回复
13楼算我没问,呵呵~~刚看懂
zhl1015 2009-09-03
  • 打赏
  • 举报
回复
请问匹配时不分大小写吗?
  • 打赏
  • 举报
回复
至于为会 DOTALL 要使用 (?s) 呢,因为匹配时都看作一行了,也就是 single line,因此就是 (?s) 了,呵呵。
bigbug9002 2009-09-03
  • 打赏
  • 举报
回复
我一直以为DOTALL是一个单词,都不知道这是什么东西.原来是 dot all
  • 打赏
  • 举报
回复
关于 (?s) 也可以参考这个帖子 7 楼的回复:

http://topic.csdn.net/u/20080627/14/8a91b33a-f35c-4303-85b5-e0a8da462202.html
  • 打赏
  • 举报
回复
(?s) 表达 dot all 的意思。

默认时 . 是不能匹配行结束符的,行结束符有六种。什么是行结束符请参考 java.util.regex.Pattern 的 API DOC 里面有说明。

当带有 (?s) 也就是 DOTALL 匹配模式时 . 是可以匹配行结束符的。
bigbug9002 2009-09-03
  • 打赏
  • 举报
回复
除了.可以匹配/n还有没有别的了?
bigbug9002 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bao110908 的回复:]

你这个问题比上面那个帖子还要简单很多:

Java codepublicclass Test {publicstaticvoid main(String[] args) {
String str="<script>aaaaaaaaa</SCRIPT>111 <SCRIPT>bbbbbbbbbb</script> 222";
str= str.replaceAll("(?is)\\s*<script>.*?</script>\\s*","");
System.out.println(str);
}
}
[/Quote]

给说一下(?s)好吗?
yanliang_xt 2009-09-03
  • 打赏
  • 举报
回复
学习。。
加载更多回复(5)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧