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

String regex = "\\w.(jpg|png|jpeg|bmp|gif)$"
// false
System.out.println("aiewurkjkjkj.jpg".matches(regex));
System.out.println("aiewurkjkjkj.png".matches(regex));
System.out.println("aiewurkjkjkj.gif".matches(regex));

上面的没有一个验证通过!不知道问题出哪里!

正则表达式没有问题,我验证过了...
clipboard.png

阅读 4.1k
4 个回答

正则表达式修改为

                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;
    }

图片描述

import java.io.*;
class test  
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String regex = ".*(jpg|png|jpeg|bmp|gif)$";
        System.out.println("aiewurkjkjkj.jpg".matches(regex));
        System.out.println("aiewurkjkjkj.png".matches(regex));
        System.out.println("aiewurkjkjkj.gif".matches(regex));
    }
}
// String regex = "\\w.(jpg|png|jpeg|bmp|gif)$"
String regex = "\w*?\.(jpg|png|jpeg|bmp|gif)$"

.*\.(jpg|png|jpeg|bmp|gif)$

上面是任意文件名, 纯英文把.*换成\w+, 英文+数字换成[\w\d]+

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题