Regular Expressions
Regular expressions are strings which may contain certain control sequences. However, they don't have to. The regular expressions in the first examples don't have any control sequences, and thus they match only if they are equal to the input string.
String s = "foo bar bar"; // input string
assert s.matches("foo bar bar"); // regular expression in red (more)
assert !s.matches("dog"); // not equal, no match (more)
assert s.replaceFirst("foo", "bar").equals("bar bar bar"); // replace first"foo"
assert s.replaceFirst("bar", "dog").equals("foo dog bar"); // replace first "bar"
assert s.replaceAll("foo", "bar").equals("bar bar bar"); // replace all "foo"
assert s.replaceAll("bar", "dog").equals("foo dog dog"); // replace all "bar"
String a = "abc";
String b = "xyz";
assert a.matches("abc|xyz"); // "|" means or (more)
assert b.matches("abc|xyz"); // matches "abc" and "xyz"
assert !"123".matches("abc|xyz"); // "123" does not match
assert a.replaceFirst("b|z", "O").equals("aOc");
assert b.replaceFirst("b|z", "O").equals("xyO");
assert a.replaceAll("a|b|c", "O").equals("OOO");
assert a.matches("(a)(b)(c)"); // "()" defines a capturing group (more)
assert a.matches("((a)bc)"); // nested groups are possible
String c = "cold";
assert c.matches("(b|c)old"); // or and groups combined
assert c.matches("ice|((b|c)ol(d|t))|hot");
assert c.replaceAll("o(d|l)", "XX").equals("cXXd");
String d = "(|)";
assert d.matches("\\(\\|\\)"); // escaping (more)
String a = "abc";
assert a.matches("a[bgh]c"); // "[]" defines a character class(more)
assert a.replaceAll("[abc]", "X").equals("XXX");
assert a.matches("[a-z][a-z][a-z]"); // "-" defines a character range
assert a.replaceAll("[b-f]", "X").equals("aXX");
String b = "I love Java";
assert b.replaceAll("[a-zA-Z]", "X").equals("X XXXX XXXX");
assert b.replaceAll("[oa-cJ]", "X").equals("I lXve XXvX");
assert a.matches("[[^x-z][^k][^st-w]"); // "^" means "all other characters match" (more)
assert a.replaceAll("[[^b]", "X").equals("XbX");
assert "x".matches("."); // "." matches any character except newline (more)
assert a.matches("...");
assert b.matches("I.l.v. .a.a");
assert b.replaceAll(".", "X").equals("XXXXXXXXXXX");
assert a.matches("\\w\\w\\w"); // "\\w" is short for "[a-zA-Z_0-9]" (more)
assert b.replaceAll("\\w", "X").equals("X XXXX XXXX");
assert " ".matches("\\s"); // "\\s" matches whitespace ("[ \t\n\x0B\f\r]") (more)
assert b.replaceAll("\\s", "X").equals("IXloveXJava");
assert "123".matches("\\d\\d\\d"); // "\\d" is short for "[0-9]" (more)
assert !a.matches("\\W\\W\\W"); // "\\W" inverts "\\w", same as "[^a-zA-Z_0-9]" (more)
assert b.replaceAll("\\S", "X").equals("X XXXX XXXX");
assert "a1".replaceAll("\\D", "X").equals("X1");
String a = "b ba baa baaa";
assert a.replaceAll("ba*", "X").equals("X X X X"); // "*" means "zero or more" (more)
assert a.matches("ba* ba* ba* ba*");
assert a.replaceAll("b(aa)*, "X").equals("X ba X baaa"); // apply "*" to group "aa"
assert a.replaceAll("b[a-z]*", "X").equals("X X X X");
assert a.matches("(ba* *)*"); // complex pattern (more)
assert a.replaceAll("ba+", "X").equals("b X X X"); // "+" means "one or more" (more)
assert a.matches("b ba+ ba+ ba+");
assert a.replaceAll("b(aa)+, "X").equals("b ba X baaa"); // apply "+" to group "aa"
assert a.replaceAll("b[a-z]+", "X").equals("b X X X");
assert a.matches("b( ba+)+"); // complex pattern (more)
assert a.replaceAll("ba?", "X").equals("X X Xa Xaa"); // "?" means optional (0 or 1) (more)
assert a.replaceAll("b(aa)?, "X").equals("X ba X Xa"); // apply "?" to group "aa"
assert a.matches("(ba* ?)+"); // complex pattern
assert a.replaceAll("ba{2}", "X").equals("b ba X baaa"); // "{2}" means "twice" (more)
assert a.replaceAll("ba{2,3}", "X").equals("b ba X X"); // "{2,3}" means "2-3 times" (more)
assert a.replaceAll("ba{2,}", "X").equals("b ba X X"); // "{2,}" means "at least twice" (more)
String a = "aaa";
String b = "abc aca";
assert a.replaceAll("^a", "X").equals("Xaa"); // "^" means "beginning of input/line" (more)
assert a.matches("^aaa");
assert !b.matches("^aca");
assert a.replaceAll("a$", "X").equals("aaa"); // "$" means "end of input/line" (more)
assert a.matches("^aaa$");
assert !b.matches("abc$");
assert b.replaceAll("\\ba", "X").equals("Xbc Xca"); // "\b" means "at word boundary" (more)
assert b.replaceAll("\\Ba", "X").equals("abc acX"); // "\B" means "not at word boundary" (more)
String a = "aBcDeF";
String b = "A\nB\nC";
assert a.replaceAll("(?i)[a-f]", "X").equals("XXXXXX"); // (?i) means CASE_INSENSITIVE (more)
assert b.matches("(?s).+"); // (?s) enables DOTALL mode (more)
assert b.matches("(?is)[a-z].[a-z].[a-z]"); // (?is) combines 'i' and 's' (more)
assert !b.matches("(?is)[a-z].[a-z].(?-i)[a-z]"); // (?-i) disables the i flag (more)
assert b.replaceAll("(?m)^\\w", "X").equals("X\nX\nX"); // (?m) enables MUTLILINE mode (more)

