求一正则表达式

蓝黑十子星 2013-07-25 12:24:35
要求格式如:1001-01-01-01-01
前4位首位不能为0其他都可以如“1111”,‘3002’,‘2093’
后面可以不限连接‘xx’两位数,不允许为‘00’
求大牛解答急!!!!!!!!!!
...全文
142 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rencht 2013-07-25
  • 打赏
  • 举报
回复
String regex = "[1-9]\\d{3}(-(?!00)\\d{2})*";
String input = "1101-01-10";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
System.out.println(m.matches());
花木兰1闪21A 2013-07-25
  • 打赏
  • 举报
回复

 public static void main(String[] args) {    
        String str = "2333-11-11-55-01";
        Pattern pattern = Pattern.compile("[^0]\\d{3}(-\\d{2}(?<!(00)))+");
        Matcher matcher = pattern.matcher(str);
        while(matcher.find()){
        System.out.println(matcher.group());
        }
    }
花木兰1闪21A 2013-07-25
  • 打赏
  • 举报
回复
引用
引用 5 楼 tlfu_12344 的回复: 这样有bug 2012-11-111-11 结果是:2012-11-11,后面的1-11没取出来,不对么?
我理解的是111是不符合要求的应该舍弃,也就是后面的-11就不应该出来,个人理解不同吧
oh_Maxy 版主 2013-07-25
  • 打赏
  • 举报
回复
引用 5 楼 tlfu_12344 的回复:
这样有bug 2012-11-111-11
结果是:2012-11-11,后面的1-11没取出来,不对么?
花木兰1闪21A 2013-07-25
  • 打赏
  • 举报
回复
[1-9]\\d{3}(-\\d{2}(?!\\w{1,})(?<!-00))+
\\w比\\d好些
花木兰1闪21A 2013-07-25
  • 打赏
  • 举报
回复
引用
这样行不: Java code ? 12345678910111213141516171819202122232425262728 public static void main(String[] args) { String str1 = "1001-01-01-01-01"; String str2 = "0101-01-01-01-01"; String str3 = "1001-01"; String str4 = "1001-00-10"; String str5 = "1001-11-00"; Pattern p = Pattern.compile("([^0]\\d{3}(-(?!00)\\d{2})+)"); show(str1,p); show(str2,p); show(str3,p); show(str4,p); show(str5,p); } private static void show(String str,Pattern p) { Matcher m = p.matcher(str); if(m.find()) { System.out.println(m.group(1)); } else { System.out.println("没匹配到"); } }
这样有bug 2012-11-111-11
花木兰1闪21A 2013-07-25
  • 打赏
  • 举报
回复
刚那个后面是三个数有bug,修改了一下:

 public static void main(String[] args) {    
        String str = "2333-11-11-55-01-02";
        Pattern pattern = Pattern.compile("[1-9]\\d{3}(-\\d{2}(?!\\d{1,})(?<!-00))+");
        Matcher matcher = pattern.matcher(str);
        while(matcher.find()){
        System.out.println(matcher.group());
        }
    }
oh_Maxy 版主 2013-07-25
  • 打赏
  • 举报
回复
这样行不:

    public static void main(String[] args)
    {
        String str1 = "1001-01-01-01-01";
        String str2 = "0101-01-01-01-01";
        String str3 = "1001-01";
        String str4 = "1001-00-10";
        String str5 = "1001-11-00";
        Pattern p = Pattern.compile("([^0]\\d{3}(-(?!00)\\d{2})+)");
        
        show(str1,p);
        show(str2,p);
        show(str3,p);
        show(str4,p);
        show(str5,p);
    }
    
    private static void show(String str,Pattern p)
    {
        Matcher m = p.matcher(str);
        if(m.find())
        {
            System.out.println(m.group(1));
        }
        else
        {
            System.out.println("没匹配到");
        }
    }
运行结果:

1001-01-01-01-01
没匹配到
1001-01
没匹配到
1001-11

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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