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.
integrosysAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

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
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.