
| 正则表达式 | 规则 | 可以匹配 |
| A | 指定字符 | A |
| \u548c | 指定Unicode字符 | 和 |
| . | 任意字符 | a, b, &, 0, ... |
| \d | 0-9 | 0, 1, 2, ..., 9 |
| \w | a-z, A-Z, 0-9, _ | a, A, 0, _, ... |
| \s | 空格、tab键 | “ ” |
| \D | 非数字 | a, A, &, _, ... |
| \W | 非\w | &, @, 中, ... |
| \S | 非\s | a, A, &, _, ... |
| AB* | 任意个数字符 | A, AB, ABB, ABBB |
| AB+ | 至少1个字符 | AB, ABB, ABBB |
| AB? | 0个或1个字符 | A, AB |
| AB{3} | 指定个数字符 | ABBB |
| AB{1, 3} | 指定范围个数字符 | AB, ABB, ABBB |
| AB{2,} | 至少n个字符 | ABB, ABBB, ... |
| AB{0, 3} | 最多n个字符 | A, AB, ABB, ABBB |
public static boolean isValidTel(String s) {
return s.matches("0\\d{2,3}\\-\\d{6,8}");
public static void main(String[] args) {
System.out.println(isValidTel("010-123456"));
System.out.println(isValidTel("0123-12345678"));
System.out.println(isValidTel("123-0123456"));
System.out.println("------");
System.out.println(isValidTel("010#12345678"));
System.out.println(isValidTel("010X12345678"));
System.out.println(isValidTel("01-12345678"));
System.out.println(isValidTel("01234-12345678"));
System.out.println(isValidTel("01A-12345678"));
System.out.println(isValidTel("012-1234567A"));
return re.match(r'^0\d{2,3}\-\d{6,8}$', str)
print(isValidTel("010-123456"));
print(isValidTel("0123-12345678"));
print(isValidTel("123-0123456"));
print(isValidTel("010#12345678"));
print(isValidTel("010X12345678"));
print(isValidTel("01-12345678"));
print(isValidTel("01234-12345678"));
print(isValidTel("01A-12345678"));
print(isValidTel("012-1234567A"));
print(re.match(r'0\d{2,3}\-\d{6,8}', "1012-1234567A"));
print(re.search(r'0\d{2,3}\-\d{6,8}', "1012-1234567A"));
pattern2 = re.compile(r'^0\d{2,3}\-\d{6,8}$')
match2 = pattern2.match("0123-12345678")
object; span=(0, 10), match='010-123456'>
object; span=(0, 13), match='0123-12345678'>
object; span=(1, 12), match='012-12345678'>

| 正则表达式 | 规则 | 可以匹配 |
| ^ | 开头 | 字符串开头 |
| $ | 结尾 | 字符串结束 |
| [ABC] | [...]内任意字符 | A, B, C |
| [A-F0-9xy] | 指定范围的字符 | A, ..., F, 0, ..., 9, x, y |
| [^A-F] | 指定范围外的任意字符 | 非A, ..., F |
| AB|CD | AB或CD | AB, CD |
| AB|CD|EFG | AB或CD或EFG | AB, CD, EFG |
public static boolean isValidTel(String s) {
return s.matches("0\\d{2,3}\\-[1-9]\\d{5,7}");
public static boolean isValidQQ(String s) {
return s.matches("^[1-9]\\d{4,9}$");
public static void main(String[] args) {
System.out.println(isValidQQ("10000"));
System.out.println(isValidQQ("99999"));
System.out.println(isValidQQ("1234567890"));
System.out.println("-----");
System.out.println(isValidQQ("00001"));
System.out.println("-----");
System.out.println(isValidTel("010-123455"));
System.out.println(isValidTel("0123-12345678"));
System.out.println("-----");
System.out.println(isValidTel("123-12345678"));
System.out.println(isValidTel("010-023456"));
return re.match(r'^0\d{2,3}\-[1-9]\d{5,7}$', str)
return re.match(r'^[1-9]\d{4,9}$', str)
print(isValidQQ("10000"));
print(isValidQQ("99999"));
print(isValidQQ("1234567890"));
print(isValidQQ("00001"));
print(isValidTel("010-123455"));
print(isValidTel("0123-12345678"));
print(isValidTel("123-12345678"));
print(isValidTel("010-023456"));
object; span=(0, 5), match='10000'>
object; span=(0, 5), match='99999'>
object; span=(0, 10), match='1234567890'>
object; span=(0, 10), match='010-123455'>
object; span=(0, 13), match='0123-12345678'>
- 示例:判断用户输入的年份是否是19xx年:
- 规则:1 9 0-9 0-9
- 正则:19\d\d
- java字符串:"19\\d\\d"
- java代码:
public static boolean is19xx(String s) {
return s.matches("19\\d\\d");
public static void main(String[] args) {
System.out.println(is19xx("1900"));
System.out.println(is19xx("1911"));
System.out.println(is19xx("1999"));
System.out.println("------");
System.out.println(is19xx(null));
System.out.println(is19xx(""));
System.out.println(is19xx("19"));
System.out.println(is19xx("190A"));
System.out.println(is19xx("19001"));
System.out.println(is19xx("1900s"));
System.out.println(is19xx("2900"));
System.out.println(is19xx("A900"));
- 运行结束:
return re.match(r'19\d\d', str)
pattern2 = re.compile(r'^0\d{2,3}\-\d{6,8}$')
match2 = pattern2.match("0123-12345678")
object; span=(0, 4), match='1900'>
object; span=(0, 4), match='1911'>
object; span=(0, 4), match='1999'>
object; span=(0, 4), match='1900'>
object; span=(0, 4), match='1900'>

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public static void main(String[] args) {
String regex = "^\\d{3,4}\\-\\d{6,8}$";
System.out.println("010-12345678".matches(regex));
System.out.println("------");
Pattern pattern = Pattern.compile("^\\d{3,4}\\-\\d{6,8}$");
Matcher matcher = pattern.matcher("010-12345678");
System.out.println(matcher.matches());
System.out.println(pattern.matcher("021-123456").matches());
System.out.println(pattern.matcher("021#123456").matches());
System.out.println("------");
Pattern pattern1 = Pattern.compile("^(\\d{3,4})\\-(\\d{6,8})$");
Matcher matcher1 = pattern1.matcher("010-12345678");
System.out.println(matcher1.group(0));
System.out.println(matcher1.group(1));
System.out.println(matcher1.group(2));
regex = "^\d{3,4}\-\d{6,8}$"
print(re.match(regex, "010-12345678"))
print(re.match(regex, "021-123456"))
print(re.match(regex, "021#123456"))
pattern = re.compile(r'^\d{3,4}\-\d{6,8}$')
print(pattern.match('021-123456A'))
print(pattern.match("021-123456"))
matchObj = re.match(r'^(\d{3,4})\-(\d{6,8})$',"010-12345678")
print("matchObj.group() : ", matchObj.group())
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(2) : ", matchObj.group(2))
object; span=(0, 12), match='010-12345678'>
object; span=(0, 10), match='021-123456'>
object; span=(0, 10), match='021-123456'>
matchObj.group() : 010-12345678
matchObj.group(2) : 12345678

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public static void main(String[] args) {
Pattern pattern1 = Pattern.compile("^(\\d+)(0*)$");
Matcher matcher1 = pattern1.matcher("12300");
System.out.println(matcher1.group(1));
System.out.println(matcher1.group(2));
Pattern pattern2 = Pattern.compile("^(\\d+?)(0*)$");
Matcher matcher2 = pattern2.matcher("12300");
System.out.println(matcher2.group(1));
System.out.println(matcher2.group(2));
Pattern pattern3 = Pattern.compile("^(\\d??)(0*)$");
Matcher matcher3 = pattern3.matcher("12300");
System.out.println(matcher3.group(1));
System.out.println(matcher3.group(2));
pattern1 = re.compile(r'^(\d+)(0*)$')
match1 = pattern1.match("12300")
pattern2 = re.compile(r'^(\d+?)(0*)$')
match2 = pattern2.match("12300")
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public static void main(String[] args) {
System.out.println(Arrays.toString("a b c".split("\\s")));
System.out.println(Arrays.toString("a b c".split("\\s")));
System.out.println(Arrays.toString("a b c".split("\\s+")));
System.out.println(Arrays.toString("a, b ;; c".split("[\\,\\;\\s]+")));
System.out.println("----");
String s = "The quick brown fox jumps over the lazy dug.";
Pattern p = Pattern.compile("\\w*o\\w*", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(s);
String sub = s.substring(m.start(), m. end());
System.out.println(sub+", start="+m.start()+", end="+m.end());
System.out.println("-----");
String s1 = "The quick brown fox jumps over the lazy dug.";
System.out.println(s1.replaceAll("\\s+"," "));
System.out.println(s1.replaceAll("\\s+"," ").replaceAll("(\\w+)", "$1"));
The quick brown fox jumps over the lazy dug.
The quick brown fox jumps over the lazy dug.

print(re.split(r'\s',("a b c")))
print(re.split(r'\s',("a b c")))
print(re.split(r'\s+',("a b c")))
print(re.split(r'[\,\;\s]+',("a, b c")))
s = "The quick brown fox jumps over the lazy dug."
p = re.compile(r'\w*o\w*', re.I)
it = re.finditer(r'\w*o\w*',s, re.I)
s1 = "The quick brown fox jumps over the lazy dug."
s2 = re.sub(r'\s+',' ',s1)
print(re.sub(r'(\w+)','\g<1>',s2))
The quick brown fox jumps over the lazy dug.
The quick brown fox jumps over the lazy dug.