Regular Expressions

Java supports regular expressions like many other programming languages, the syntax for regular expressions across all languages are very simila, below is a table that lists the special characters used for regular expressions.

Special Characters
. character matches any character except the newline character, the special combination of .* tries to match as much as possible.
+ character means one or more of the preceding characters
[ ] character enable you to define patterns that match one of a group of alternatives, you can also uses ranges such as [0-9] or [a-z,A-Z]
* character match zero or more occurrences of the preceding character
? character match zero or one occurrence of the preceding character
Pattern anchor there are a number of pattern anchors, match at beginning of a string (^ or \A), match at the end of a string ($ or \Z), match on word boundary (\b) and match inside a work (\B - opposite of \b)
Escape sequence if you want to include a character that is normally treated as a special character, you must precede the character with a backslash, you can use the \Q to tell perl to treat everything after as a normal character until it see's \E
Excluding you can exclude words or characters by using the ^ inside square brackets [^]
Character-Range escape sequences there are special character range escape sequences such as any digit (\d), anything other than a digit (\D)
Specified number of occurrences you can define how any occurrences you want to match using the {<minimum>,<maximum>}
specify choice the special character | (pipe) enables you to specify two or more alternatives to choose from when matching a pattern
Portition reuse some times you want to store what has been matched, you can do this by using (), the first set will be store in \1 (used in pattern matching) or $1 (used when assigning to variables) , the second set \2 or $2 and so on.
Different delimiter you can specify a different delimiter
Special Characters Examples
. character d.f          # could match words like def, dif, duf
d.*f         # could match words like deaf, deef, def, dzzf, etc
+ character de+f         # could match words like def, deef, deeef, deeeef, etc
+            # match words between multiple spaces
[ ] character

d[eE]f       # match words def or dEf
a[456]c      # match a followed by any digit then c such as a4c, a5c or a6c
d[eE]+f      # match words like def, dEf, deef, dEeF, dEEeeEef, etc

d[a-z]f      # match words like def, def, dzf, dsf, etc
1[0-9]0      # match numbers like 100, 110, 120, 150, 170, 190, etc

* character de*f         # match words like df, def, deef, deeef, etc
? character de?f         # match only the words df and def (not deef only matches one occurence)
Pattern anchors

^hello       # match only if line starts with hello
hello$       # match only if hello is at end of line

\bdef        # only matches when def is at the beginning of a word define, defghi
def\b        # only matches when def is at the end of a word abcdef

\Bdef        # matches abcdef (opposite of \b)
def\B        # matches defghi (opposite of \b)

Escape sequence \+salary     # will match the word +salary, the + (plus) is treated as a normal character because of the \
\Q**++\E     # will match **++
Excluding d[^eE]f      # 1st character is d, 2nd character is anything other than e or E, last character is f
Character-Range escape sequences \d           # match any digit
\d+          # match any number of digits
Specified number of occurrences de{3}f       # match only deeeef the {3} means three preceding e's
de{1,3}      # match only deef, deeef and deeeef ( minimum = 1, maximum = 3 occurrences)  
specify choice def|ghi      # match either def or ghi

The simplest way to learn Java and regular expressions is to show some examples as they are not very difficult to learn

Basic Example
Pattern pat; 
Matcher mat; 
boolean found; 
 
pat = Pattern.compile("Java"); 
mat = pat.matcher("Java"); 
 
found = mat.matches(); // check for a match 
 
System.out.println("Testing Java against Java."); 
if(found) System.out.println("Matches"); 
else System.out.println("No Match"); 
 
System.out.println(); 
 
System.out.println("Testing Java against Java 8."); 
mat = pat.matcher("Java 8"); // create a new matcher 
 
found = mat.matches(); // check for a match 
 
if(found) System.out.println("Matches"); 
else System.out.println("No Match"); 
Using a qualifier
Pattern pat = Pattern.compile("W+"); 
Matcher mat = pat.matcher("W WW WWW"); 
 
while(mat.find()) 
    System.out.println("Match: " + mat.group()); 
Using a wildcard and qualifier
Pattern pat = Pattern.compile("e.+d"); 
Matcher mat = pat.matcher("extend cup end table"); 
 
while(mat.find()) 
    System.out.println("Match: " + mat.group());
Using the ? qualifier
// Use reluctant matching behavoir. 
Pattern pat = Pattern.compile("e.+?d"); 
Matcher mat = pat.matcher("extend cup end table"); 
 
while(mat.find()) 
    System.out.println("Match: " + mat.group()); 
Using replaceAll()
String str = "Jon Jonathan Frank Ken Todd"; 
 
Pattern pat = Pattern.compile("Jon.*? "); 
Matcher mat = pat.matcher(str); 
 
System.out.println("Original sequence: " + str); 
 
str = mat.replaceAll("Eric "); 
 
System.out.println("Modified sequence: " + str); 
Using split()
 // Match lowercase words. 
Pattern pat = Pattern.compile("[ ,.!]"); 
 
String strs[] = pat.split("one two,alpha9 12!done."); 
 
for(int i=0; i < strs.length; i++) 
    System.out.println("Next token: " + strs[i]);