• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 3417
  • Last Modified:

File name pattern matching

I want to use regular expression to match a file name with a given file name pattern. The pattern can be like "*.log", or "*.log.2*".

For example, I have a file name like this: "xxx.log.2007.04.04"

Then "*.log" will not match this file name.

But "*.log.2*" will match this file name.

How do I construct the regular expression to use the pattern "*.log" and "*.log.2*" then? Thanks.
0
integrosys
Asked:
integrosys
2 Solutions
 
elfe69Commented:
In that case, I would simply use standard String functions:

if ((filename.endsWith(".log")) || (filename.indexOf(".log.2") > -1)) {
    // the filename matches one of the patterns
}
0
 
integrosysAuthor Commented:
In that case, the code would have to search and remove those * from the pattern. This is very troublesome.
0
 
integrosysAuthor Commented:
The contents of the following method is what I need:

public boolean match(String fileName, String pattern) {
  // return true if fileName matches pattern; false otherwise
}

So if I call match("xxx.log.2007.04.04", "*.log"), it will return false.

If I call match("xxx.log", "*.log"), it will return true.

If I call match("xxx.log.2007.04.04", "*.log.2*"), it will return true.
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
elfe69Commented:
Use standard Java regex:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

public boolean match(String fileName, String pattern) {
  Pattern p = Pattern.compile(pattern);
  Matcher m = p.matcher(filename);
  return m.matches();
}


0
 
integrosysAuthor Commented:
Your solution does not work at all. Have you actually tried running it at all?
0
 
elfe69Commented:
My solution work if you use regular expression patterns (".*\\.log" instead of "*.log").

If you want other regular expression syntax, I think you have to write your own method.
0
 
integrosysAuthor Commented:
You don't seem to get my question. My question is how to write that method using regular expression. If I can write it myself, I wouldn't need to post the question here.
0
 
elfe69Commented:
What is the expression syntax you want to support ? Only * tokens to replace one or more characters ?
0
 
integrosysAuthor Commented:
I need the code for the following method:

public boolean match(String fileName, String pattern) {
  ...
}

So if I call match("xxx.log.2007.04.04", "*.log"), it will return false.

If I call match("xxx.log", "*.log"), it will return true.

If I call match("xxx.log.2007.04.04", "*.log.2*"), it will return true.

NOTE: I do not want to change the pattern that I pass in. This pattern is provided by the users. The users do not understand regular expression. So if they pass in "*.log", then the method itself has to convert to the proper regular expression itself.

Thanks.
0
 
elfe69Commented:
Use a tokenizer to traverse the pattern and check if you can find all the tokens in the filename in the right order.
0
 
integrosysAuthor Commented:
Can you be more specific? Not sure what you mean.
0
 
funnyveryfunnyCommented:
String regex = (pattern.equals(*.log))? "^.+\\.log$":"^[\\w]+\\.log[.\\d]+$";
return fileName.matches(regex);

Something like this should do the trick assuming xxx is a character class.
0
 
Computer101Commented:
Forced accept.

Computer101
EE Admin
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now