首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

正则表达式怎么实现以下功能

2013-08-01 
正则表达式如何实现以下功能我写了如下的代码String strDateText sdfgnhfdnjh2013年7月01日sdgldfjhggk

正则表达式如何实现以下功能
我写了如下的代码


String strDateText = "sdfgnhfdnjh2013年7月01日sdgldfjhggkfp";
String regex = "[(\\d{4}年\\d{1,2}月)|(\\d{4}年\\d{1,2}月\\d{1,2}日)]";
        Matcher m = Pattern.compile(regex).matcher(strDateText );
        while(m.find()){
        String t = m.group();
        System.out.println("t:" + t);
        fdatDate = t.replaceAll("年|月|日", "/");
        }

为什么执行的结果是

t:2
t:0
t:1
t:3
t:年
t:7
t:月
t:0
t:1
t:日

我想要的结果是:
t:2013年7月1日
正则表达式 Java
[解决办法]
首先表达式改成String regex = "\\d{4}年\\d{1,2}月(\\d{1,2}日)?";
然后解释一下为什么你的错误
因为你使用了多选组[],在[]里的大部分元字符都是无效的,意思是(,*,?,
[解决办法]
,{,}等这样的字符不再是元字符,而就匹配一个(,*,?,
[解决办法]
,{,}。
你的正则表达式就是匹配一下字符、
数字 { } 4 1 2 逗号 年 月 日 ( ) 
[解决办法]
String strDateText = "sdfgnhfdnjh2013年7月01日sdgldfjhggkfp";
String regex = "[(\\d{4}年\\d{1,2}月)
[解决办法]
(\\d{4}年\\d{1,2}月\\d{1,2}日)]";
        Matcher m = Pattern.compile(regex).matcher(strDateText );
        StringBuffer str = new StringBuffer();
        String fdatDate ;
        while(m.find()){
            String t = m.group();
            System.out.println("t:" + t);


            str.append(t);
           fdatDate = t.replaceAll("年
[解决办法]

[解决办法]
日", "/");
        }
        System.out.println(str);
        System.out.println(str.toString().replaceAll("年
[解决办法]

[解决办法]
日", "/").substring(0,str.length()-1));


[解决办法]
顶1L~
俺也偷懒改写了个简单点的:

        String strDateText = "sdfgnhfdnjh2013年7月01日sdgldfjhggkfp";
        String strDateText2 = "sdfgnhfdnjh2013年7月sdgldfjhggkfp";

        String regex = "((\\d{4}年\\d{1,2}月\\d{1,2}日)
[解决办法]
(\\d{4}年\\d{1,2}月))";
        Pattern p = Pattern.compile(regex);

        Matcher m = p.matcher(strDateText );
        if(m.find())
        {
            System.out.println(m.group(1));
        }
        
        m = p.matcher(strDateText2);
        if(m.find())
        {
            System.out.println(m.group(1));
        }

中括号改成小括号,里面的两个小括号顺序换了下,长的放前面。

热点排行