怎样用通配符去匹配字符串?

zclgod 2005-07-21 11:50:24
请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符,而 * 则匹配一个或多个字符。一个如 '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脚本实现以上功能!
也就是用户输入一个字符串,可以在任意位置有任意个*或?,
*代表任意字符,?代表一个字符。
然后去和其他字符串匹配。
哪位高手给个方法?
...全文
1327 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zclgod 2005-07-24
  • 打赏
  • 举报
回复
自己顶!
求解!
leafxx 2005-07-23
  • 打赏
  • 举报
回复
也就是用 .*来代替 *,用.来匹配?

这其实也是用一个正则表达式来匹配的
正规式.*\*.* 匹配 *
正规式.*\?.* 匹配 ?
zclgod 2005-07-23
  • 打赏
  • 举报
回复
谢谢大家
就是页面有个文本框
不限制用户输入什么
然后根据用户的输入构建正则表达式
然后去匹配

呵呵
因为我没办法预知用户会输入什么
比如他可能输入?**?aaf?*??**afa*.*af?*
呵呵 这么变态的咋办?
是不是按照


也就是用 .*来代替 *,用.来匹配?

这其实也是用一个正则表达式来匹配的
正规式.*\*.* 匹配 *
正规式.*\?.* 匹配 ?

这个规则去替换用户输入字符串里的*和?
然后Pattern p=Pattern.compile("替换后的正则表达式");
然后再去匹配?
shuiwuya 2005-07-23
  • 打赏
  • 举报
回复
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);
}
}
zclgod 2005-07-23
  • 打赏
  • 举报
回复
自己顶一下。
希望高手解答
leafxx 2005-07-22
  • 打赏
  • 举报
回复
你自己捕获用户输入的文件名,然后根据正则表达式的语法转化为正则表达式

假设用户要找其中一个含有 plane 关键字的图片,并且不确定是.jpg格式或者.gif格式
他会输入 *plane*,接着可能会在你的用户界面上同时勾选上 .jpg和 .gif
然后开始搜索

这时候你就会根据用户的这一次搜索的请求生成一个正规式

.*(plane).*\.(jpg)|(gif)
yegaofei 2005-07-22
  • 打赏
  • 举报
回复
是不是可以用正则表达式
leafxx 2005-07-22
  • 打赏
  • 举报
回复
这就是你要求的正规式 data.*\.dat
相当于data*.dat
zclgod 2005-07-22
  • 打赏
  • 举报
回复
就像搜索文件一样
你输个带通配符的文件名
系统把符合的都找出来
zclgod 2005-07-22
  • 打赏
  • 举报
回复
*代表任意字符,?代表一个字符
是用户输入一个字符串
带*和?
然后去和1000个字符串比较
符合的返回TRUE
不符合返回FALSE
data*.dat 可以匹配下述所有
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
humanity 2005-07-22
  • 打赏
  • 举报
回复
apache / oro
leafxx 2005-07-22
  • 打赏
  • 举报
回复
>可是如果是任意位置任意个*和?

你是指任意位置有任意个'*'和'?',你这里的*和?是字符还是匹配符?
leafxx 2005-07-22
  • 打赏
  • 举报
回复
何谓“要根据用户输入的字符串动态的生成正则表达式啊”??

正规式是你自己设定的,然后来匹配字符串
怎么能先得到文本然后来制定正规式,这样做有什么意义?
你当然可以接受一个字符串来Pattern.compile()生成一个正规式,不知你是不是这个意思
zclgod 2005-07-22
  • 打赏
  • 举报
回复
谢谢楼上!
可是如果是任意位置任意个*和?
怎么办?
不又不知道
用户会输入怎样的字符串?
要根据用户输入的字符串动态的生成正则表达式啊
leafxx 2005-07-22
  • 打赏
  • 举报
回复
自从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();

zclgod 2005-07-22
  • 打赏
  • 举报
回复
怎么根据用户的输入动态构建正则表达式?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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