CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 扩展类

一个正则表达式的问题。。。。。。。。。。。。。。。。。。。。。。。。。

楼主laoxing521(想做程序员的农民)2005-05-23 13:34:58 在 Java / J2SE / 扩展类 提问

方法:  
  private   String   replace   (String   content,   String   pattern,   String   replace)  
      {  
          try  
          {  
              pattern1   =   patterCom.compile(pattern,   Perl5Compiler.CASE_INSENSITIVE_MASK);   //后面参数,创建大小写不敏感的模式  
              content   =   Util.substitute(matcher,  
                                                                  pattern1,  
                                                                  new   Perl5Substitution(replace,   Perl5Substitution.INTERPOLATE_ALL),  
                                                                  content,   Util.SUBSTITUTE_ALL);  
          }  
          catch   (Exception   e)  
          {  
              e.printStackTrace();  
          }  
          return   content;  
      }  
   
  调用测试:  
   
  String   str   =     replace(inputStr,   "\\[IMG\\](.+)\\[/IMG\\]",   "<img   src=\"$1\">");  
   
  如果   inputStr   =   "[IMG]imagesrc.jpg[/IMG]";  
  则正常  
  如果   inputStr   =   "[IMG]imagesrc.jpg[/IMG][IMG]imagesrc.jpg[/IMG]";  
  就成了   <img   src="imagesrc.jpg[/IMG][IMG]imagesrc.jpg");  
  即,拿第一段[IMG]与最后一段[/IMG] 匹配去了  
  问一下,怎样改决  
  问题点数:20、回复次数:19Top

1 楼laoxing521(想做程序员的农民)回复于 2005-05-23 17:16:56 得分 0

晕  
   
  连顶都没得个人来顶一下Top

2 楼neulx(aha)回复于 2005-05-24 10:09:40 得分 2

我帮你Top

3 楼laoxing521(想做程序员的农民)回复于 2005-05-24 13:01:59 得分 0

再顶.........Top

4 楼sy_315(apollo)回复于 2005-05-24 13:26:08 得分 2

......  
  编译原理学过正则式。  
  Top

5 楼ariel_521(Ariel)回复于 2005-05-25 10:41:42 得分 2

嘿嘿嘿,这分俺拣了  
  不知道你这程序段的上下都是什么,所以给你一段程序参考一下:  
  对了,得是SDK   1.5   下调试  
  import   java.util.*;  
  public   class   Example    
  {      
          public   static   void   main(String   args[   ])  
          {      
                String   s="we   are   stud,ents";  
                StringTokenizer   fenxi=new   StringTokenizer(s,"   ,");   //空格和逗号做分  
                int   number=fenxi.countTokens();  
                while(fenxi.hasMoreTokens())    
                  {    
                        String   str=fenxi.nextToken();  
                        System.out.println(str);  
                        System.out.println("还剩"+fenxi.countTokens()+"个单词");  
                  }  
                System.out.println("s共有单词:"+number+"个");  
          }    
  }  
   
  Top

6 楼ariel_521(Ariel)回复于 2005-05-25 10:43:45 得分 1

我正做毕业设计呢,是一个过滤浏览器,做的是不是和你差不多啊?  
  我的信箱:ariel_521@hotmail.comTop

7 楼ariel_521(Ariel)回复于 2005-05-25 10:58:16 得分 1

http://www.netbei.com/Article/jsp/jsp3/200407/44.htmlTop

8 楼laoxing521(想做程序员的农民)回复于 2005-05-25 12:41:37 得分 0

回   ariel_521(Ariel)    
   
  与UBB差不多的东东吧  
   
  其实我一开始也就是你说的这么做的,用StringTokenizer,分割,截子串,再分析,填充,  
  后来,又觉得太烦琐了,就改为用正则表达式  
  Top

9 楼ariel_521(Ariel)回复于 2005-05-25 13:23:11 得分 1

呀,刚才的例子错了  
  应该是这个  
  import   java.util.regex.*;  
  class   Example  
  {  
          public   static   void   main(String   args[   ])  
          {      
                Pattern     p;                                                           //模式对象。  
                Matcher     m;                                                         //匹配对象。  
                String       s1="0A1A2A3A4A5A6A7A8A9";     //待匹配的字符序列。  
                p=Pattern.compile("\\dA\\d");                             //用模式"\\dA\\d"初试化模式对象。  
                m=p.matcher(s1);                                               //用待匹配字符序列初始化匹配对象。  
                while(m.find())  
                {  
                      String   str=m.group();  
                      System.out.print("从"+m.start()+"到"+m.end()+"匹配模式子序列:");  
                      System.out.println(str);  
                }    
              String   temp=m.replaceAll("***");  
              System.out.println(temp);  
              System.out.println(s1);  
              m=p.matcher("9A00A3");                                         //重新初始化匹配对象。  
              if(m.matches())  
                {  
                      String   str=m.group();  
                      System.out.println(str);  
                }    
              else  
                {  
                      System.out.println("不完全匹配");  
                }  
              if(m.lookingAt())  
                {  
                      String   str=m.group();  
                      System.out.println(str);  
                }        
          }  
  }Top

10 楼ariel_521(Ariel)回复于 2005-05-25 13:26:02 得分 1

真是的,我早就想给你重发了,可是斑竹不让有连续4个以上的帖子,所以只好等你发个话我才能重新发。郁闷死我了~~~~~~~~~~~~~Top

11 楼laoxing521(想做程序员的农民)回复于 2005-05-25 13:39:44 得分 0

兄弟呀  
   
  假设我输入   :>>       [url]http://url[/url]  
                          输出<<==       <a   href="http://url"/>  
   
          输入:    [url]http://111[/url]www[url]http://222[/url][url]http://333[/url]  
          输出:     <a   href="http://111"/>www<a   href="http://222"/><a   href="http://333"/>  
   
  这就是我要的结果  
   
  可用正则一配,就成了:<a   href="http://111[/url]www[url]http://222[/url][url]http://333"/>  
   
  我现在想到一个办  
  也就是在写正则表的写法   在   \\[url\\](.+)\\[/url\\]   中间,不能含有\\[url\\](.+)\\[/url\\]才匹配,可是这个正则,不晓得是何时写  
   
  Top

12 楼laoxing521(想做程序员的农民)回复于 2005-05-25 14:09:49 得分 0

搞定  
  正则表达式:   \[IMG\]([^\[IMG\]|\[/IMG\]]+)\[/IMG\]  
  Top

13 楼ariel_521(Ariel)回复于 2005-05-25 14:13:01 得分 1

你运行我第二次写的程序了么?  
  运行结果是  
  从0到3匹配模式子序列:   0A1  
  从4到7匹配模式子序列:   2A3  
  从8到11匹配模式子序列:   4A5  
  从12到15匹配模式子序列:   6A7  
  从16到19匹配模式子序列:   8A9  
  ***A***A***A***A***  
  0A1A2A3A4A5A6A7A8A9  
  不完全匹配  
  9A0Top

14 楼ariel_521(Ariel)回复于 2005-05-25 14:16:50 得分 2

正则表达式:   \[IMG\]([^\[IMG\]|\[/IMG\]]+)\[/IMG\]  
  你用这个配出来的结果是什么啊?Top

15 楼laoxing521(想做程序员的农民)回复于 2005-05-25 17:29:25 得分 0

还是不行了  
   
  ariel_521(Ariel) 看了一下你第二段代码  
  对我的用处不大,我的标签是成对的,不过,还是感谢你  
   
  \[IMG\]([^\[IMG\]]+)\[/IMG\]  
  就是匹配[IMG]和[/IMG]中间不含   [IMG]的段  
   
  唉  
  我又弄错了,认为   [^\[IMG\]]是说不能出现   "[IMG]",可实际上,是不能出现   '['   or   'I'   or,'M',or   'G'   or   ']'  
  而非限制"[IMG]"的连续出现  
  现在想法办法,限[IMG]不能连续出现,问题就真的解决了  
  这个正则真TMD的难写,Top

16 楼ariel_521(Ariel)回复于 2005-05-25 17:47:29 得分 2

Pattern   pattern;  
  Matcher   match;  
  pattern=Pattern.compile("<a   HREF=http://.*>*.待检索字段.*</a>",Pattern.CASE_INSENSITIVE);  
  match=pattern.matcher(str);  
  while(match.find())  
  {  
   
  }  
   
  怎么说呢,我是想让你注意这个方法。match.find()   是说“如果下面有就继续找出来”  
  这点时间我也学到了很多东西  
  你看看这么配行不行?  
  pattern=Pattern.compile("[IMG].*[/IMG]",Pattern.CASE_INSENSITIVE);  
  "[IMG]imagesrc.jpg[/IMG]";Top

17 楼ariel_521(Ariel)回复于 2005-05-25 17:48:54 得分 1

上一帖子的最后   1   行去掉Top

18 楼thomas_20(执子之手,与子偕老)回复于 2005-05-27 11:31:08 得分 2

试试这个吧!(懒式匹配):  
   
          Pattern   pattern;  
          Matcher   match;  
          pattern   =   Pattern.compile("\\[IMG\\].*?\\[/IMG\\]");  
          match   =   pattern.matcher("[IMG]imagesrc.jpg[/IMG][IMG]imagesrc.jpg[/IMG]");  
          while   (match.find())   {  
              System.out.println(match.group());  
          }Top

19 楼Goldrush(上天有好生之德)回复于 2005-05-28 15:25:27 得分 2

dingTop

相关问题

  • 正则表达式
  • 正则表达式
  • 正则表达式?
  • 正则表达式[/.-]
  • 【正则表达式!!!!!!!!】
  • 正则表达式
  • 正则表达式
  • 正则表达式
  • 正则表达式?
  • 正则表达式

关键词

  • 正则表达式
  • perl
  • 模式
  • imagesrc
  • img
  • pattern
  • 模式子序列
  • matcher
  • jpg
  • substitute

得分解答快速导航

  • 帖主:laoxing521
  • neulx
  • sy_315
  • ariel_521
  • ariel_521
  • ariel_521
  • ariel_521
  • ariel_521
  • ariel_521
  • ariel_521
  • ariel_521
  • ariel_521
  • thomas_20
  • Goldrush

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo