请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符,而 * 则匹配一个或多个字符。一个如 'data?.dat' 的模式可以找到下述文件:
data1.dat
data2.dat
datax.dat
dataN.dat如果使用 * 字符代替 ? 字符,则将扩大找到的文件数量。'data*.dat' 可以匹配下述所有文件名:
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat怎么用JAVA或JS脚本实现以上功能!
也就是用户输入一个字符串,可以在任意位置有任意个*或?,
*代表任意字符,?代表一个字符。
然后去和其他字符串匹配。
哪位高手给个方法?

解决方案 »

  1.   

    自从jdk1.4 Java开始支持正则表达式(又称为正规式)import java.util.regex.*;// ex是一个正则表达式,具体用法请参考sun的类文档
    // 匹配*.data的正则表达式是 .+/.data,当因为要经过java的字符串处理,'/'要使用'//'转义
    String ex = ".+\.dat"; // 相当于 *.dat
    Pattern p = Pattern.compile(".+\\.dat");
    Matcher m = p.matcher("filename.dat");
    boolean b = m.matches();
      

  2.   

    何谓“要根据用户输入的字符串动态的生成正则表达式啊”??正规式是你自己设定的,然后来匹配字符串
    怎么能先得到文本然后来制定正规式,这样做有什么意义?
    你当然可以接受一个字符串来Pattern.compile()生成一个正规式,不知你是不是这个意思
      

  3.   

    *代表任意字符,?代表一个字符
    是用户输入一个字符串
    带*和?
    然后去和1000个字符串比较
    符合的返回TRUE
    不符合返回FALSE
    data*.dat 可以匹配下述所有
    data.dat
    data1.dat
    data2.dat
    data12.dat
    datax.dat
    dataXYZ.dat
      

  4.   

    这就是你要求的正规式 data.*\.dat
    相当于data*.dat
      

  5.   

    你自己捕获用户输入的文件名,然后根据正则表达式的语法转化为正则表达式假设用户要找其中一个含有 plane 关键字的图片,并且不确定是.jpg格式或者.gif格式
    他会输入 *plane*,接着可能会在你的用户界面上同时勾选上 .jpg和 .gif
    然后开始搜索这时候你就会根据用户的这一次搜索的请求生成一个正规式.*(plane).*\.(jpg)|(gif)
      

  6.   

    import java.util.regex.*;
    public class RegexTest{  private String[] s={"data.dat","data1.dat","data2.dat",
         "data12.dat","datax.dat","dataXYZ.dat"};
      private static String ex1="data.\\.dat";
      private static String ex2="data.*\\.dat";  public void testRegex(String ex){
       Pattern p=Pattern.compile(ex);
       System.out.println("regex: "+ex);
       for(int i=0;i<s.length;i++){
       Matcher m=p.matcher(s[i]);
       System.out.println(s[i]+": "+m.matches());
       }
       System.out.println();
      }
      
      public static void main(String[] args){
       RegexTest test=new RegexTest();
       test.testRegex(ex1);
       test.testRegex(ex2);
      }
    }
      

  7.   

    谢谢大家
    就是页面有个文本框
    不限制用户输入什么
    然后根据用户的输入构建正则表达式
    然后去匹配呵呵
    因为我没办法预知用户会输入什么
    比如他可能输入?**?aaf?*??**afa*.*af?*
    呵呵 这么变态的咋办?
    是不是按照{
    也就是用 .*来代替 *,用.来匹配?这其实也是用一个正则表达式来匹配的
    正规式.*\*.* 匹配 *
    正规式.*\?.* 匹配 ?

    这个规则去替换用户输入字符串里的*和?
    然后Pattern p=Pattern.compile("替换后的正则表达式");
    然后再去匹配?