请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符,而 * 则匹配一个或多个字符。一个如 '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脚本实现以上功能!
也就是用户输入一个字符串,可以在任意位置有任意个*或?,
*代表任意字符,?代表一个字符。
然后去和其他字符串匹配。
哪位高手给个方法?
data1.dat
data2.dat
datax.dat
dataN.dat如果使用 * 字符代替 ? 字符,则将扩大找到的文件数量。'data*.dat' 可以匹配下述所有文件名:
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat怎么用JAVA或JS脚本实现以上功能!
也就是用户输入一个字符串,可以在任意位置有任意个*或?,
*代表任意字符,?代表一个字符。
然后去和其他字符串匹配。
哪位高手给个方法?
// 匹配*.data的正则表达式是 .+/.data,当因为要经过java的字符串处理,'/'要使用'//'转义
String ex = ".+\.dat"; // 相当于 *.dat
Pattern p = Pattern.compile(".+\\.dat");
Matcher m = p.matcher("filename.dat");
boolean b = m.matches();
怎么能先得到文本然后来制定正规式,这样做有什么意义?
你当然可以接受一个字符串来Pattern.compile()生成一个正规式,不知你是不是这个意思
是用户输入一个字符串
带*和?
然后去和1000个字符串比较
符合的返回TRUE
不符合返回FALSE
data*.dat 可以匹配下述所有
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
相当于data*.dat
他会输入 *plane*,接着可能会在你的用户界面上同时勾选上 .jpg和 .gif
然后开始搜索这时候你就会根据用户的这一次搜索的请求生成一个正规式.*(plane).*\.(jpg)|(gif)
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);
}
}
就是页面有个文本框
不限制用户输入什么
然后根据用户的输入构建正则表达式
然后去匹配呵呵
因为我没办法预知用户会输入什么
比如他可能输入?**?aaf?*??**afa*.*af?*
呵呵 这么变态的咋办?
是不是按照{
也就是用 .*来代替 *,用.来匹配?这其实也是用一个正则表达式来匹配的
正规式.*\*.* 匹配 *
正规式.*\?.* 匹配 ?
}
这个规则去替换用户输入字符串里的*和?
然后Pattern p=Pattern.compile("替换后的正则表达式");
然后再去匹配?