I am working in Java to read a string of over 100000 characters.
I have a list of keywords, that I search the string for, and if the string is present I call a function which does some internal processing.
The kind of keyword I have is “face”, for example – I wish to get all the patterns where I have matches for “faces” not “facebook”. I can accept a space character behind the face in the string so if in a string I have a match like ” face” or ” faces” or “face ” or ” faces” i can accept that too. However I can not accept “duckface” or “duckface ” etc.
I have written the regex
Pattern p = Pattern.compile("\\s+"+keyword+"s\\s+|\\s+");
where keyword is my list of keywords, but I am not getting the desired results. Can you read my description and please suggest what might be issue and how I can fix it?
Also if a pointer to a really good regex for Java page is shared I would appreciate that as well.
Thank you Contributers ..
Edit
The reason I know it is not working is I have used the following code:
Pattern p = Pattern.compile("\\s+"+keyword+"s\\s+|\\s+");
Matcher m = p.matcher(myInputDataSting);
if(m.find())
{
System.out.println("Its a Match: "+m.group());
}
This returns a blank string…
If
keywordis"face", then your current regex iswhich matches either one or more whitespace characters, followed by
faces, followed by one or more whitespace characters, or one or more whitespace characters. (The pipe|has very low precedence.)What you really want is
which matches a word boundary, followed by
face, optionally followed bys, followed by a word boundary.So, you can write:
(though obviously this will only work for words like
facethat form their plurals by simply addings).You can find a comprehensive listing of Java’s regular-expression support at http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html, but it’s not much of a tutorial. For that, I’d recommend just Googling “regular expression tutorial”, and finding one that suits you. (It doesn’t have to be Java-specific: most of the tutorials you’ll find are for flavors of regular-expression that are very similar to Java’s.)