I’m trying to match Strings that contain the word "#SP" (sans quotes, case insensitive) in Java. However, I’m finding using Regexes very difficult!
Strings I need to match:
"This is a sample #sp string",
"#SP string text...",
"String text #Sp"
Strings I do not want to match:
"Anything with #Spider",
"#Spin #Spoon #SPORK"
Here’s what I have so far: http://ideone.com/B7hHkR .Could someone guide me through building my regexp?
I’ve also tried: "\\w*\\s*#sp\\w*\\s*" to no avail.
Edit: Here’s the code from IDEone:
java.util.regex.Pattern p =
java.util.regex.Pattern.compile("\\b#SP\\b",
java.util.regex.Pattern.CASE_INSENSITIVE);
java.util.regex.Matcher m = p.matcher("s #SP s");
if (m.find()) {
System.out.println("Match!");
}
You’re doing fine, but the \b in front of the # is misleading. \b is a word boundary, but # is already not a word character (i.e. it isn’t in the set [0-9A-Za-z_]). Therefore, the space before the # isn’t considered a word boundary. Change to:
The (^|\s) means: match either ^ OR \s, where ^ means the beginning of your string (e.g. “#SP String”), and \s means a whitespace character.