为了账号安全,请及时绑定邮箱和手机立即绑定

很是蛋疼的Java正则表达式!

很是蛋疼的Java正则表达式!

慕码人8056858 2018-12-12 18:17:53
String regex = "\\w.(jpg|png|jpeg|bmp|gif)$"// falseSystem.out.println("aiewurkjkjkj.jpg".matches(regex));System.out.println("aiewurkjkjkj.png".matches(regex));System.out.println("aiewurkjkjkj.gif".matches(regex));上面的没有一个验证通过!不知道问题出哪里!正则表达式没有问题,我验证过了...
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

正则表达式修改为


                String regex = "\\w+\\.(jpg|png|jpeg|bmp|gif)$";

                System.out.println("aiewurkjkjk.jpg".matches(regex));//true

                System.out.println("aiewurkjkjkjpg".matches(regex));//false

                System.out.println("aiewurkjkjkj.png".matches(regex));//true

                System.out.println("aiewurkjkjkj.gif".matches(regex));//true

楼上154538022用户给出的正则表达式是错误的,


                String regex = ".*(jpg|png|jpeg|bmp|gif)$";//

                System.out.println("aiewurkjkjkjpg".matches(regex));//ture。结果因该为false。

看string的api可以知道


尝试将整个区域与模式匹配,当且仅当整个区域序列匹配此匹配器的模式时才返回 true。所以正则表达式后面的那个$是可有可无。


也就说你使用xxx.matches(pattern)去匹配,需要xxx整个匹配pattern才会返回true。


你应该想根据一个文件后缀名判断一个文件是否是图片,只需要匹配以.jpg,.jpeg等结尾的就可以了。

参考代码:


    public static void main(String[] args) {

                System.out.println(isImg(".jpgaiewurkjkjk"));//false

                System.out.println(isImg("aiewurkjkjkjpg"));//false

                System.out.println(isImg("aiewurkjkjkj.png"));//true

                System.out.println(isImg(".aiewurkjkjkj.gif"));//true

                System.out.println(isImg("我的不是的.gif"));//true

    }

    

    public static boolean isImg(String fileName) {

        Pattern pattern = Pattern.compile("\\.(jpg|png|jpeg|bmp|gif)$");

        Matcher m = pattern.matcher(fileName);

        if(m.find()){

            return true;

        }

        return false;

    }


查看完整回答
反对 回复 2019-01-26
  • 1 回答
  • 0 关注
  • 387 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信