正则表达式的匹配规则:
- 从左到右按规则匹配
如何编写正则表达式
精确匹配
匹配规则及示例 | 可以匹配 | 不能匹配 |
---|---|---|
"abc" | "abc" | 不能匹配:"ab", "Abc", "abcd" |
特殊字符需要转义,如"a&c",注意Java的字符串需要再加一个转义符 | "a&c" | "ab", "abc", "a&cd" |
非ascii字符用"\u####"表示一个unicode字符,如"a\u548cc" | "a和c" | "a与c","a&c","abc" |
. 可以匹配任意一个字符:"a.c" | "abc", "a&c" | "ac", "abbc" |
\d 可以匹配一个数字:"00\d" | "007", "008" | "00A", "0077" |
\D可以匹配一个非数字:"00\D" | "00A", "00#" | "001" |
\w可以匹配一个字母、数字或下划线:"java\w" | "javac", "java8", "java_", | "java#", "java " |
\s可以匹配一个空白字符:"A\sB" | "A B" "A B",tab键也算空白字符 | "AB" "A B" |
\W可以匹配一个非字母、数字或下划线:"java\W" | "java!", "java " | "javac", "java8", "java_" |
\S可以匹配一个非空白字符:"A\SB" | "A&B", "ABB" | "A B","A B"tab键也算空白字符 |
修饰符可以匹配前的任意个字符:"A\d*",先匹配字母A,再匹配任意多个数字 | "A", "A1", "A007" | "AB" |
修饰符+可以匹配+前的至少一个字符:"A\d+",先匹配字母A,再匹配至少1个数字 | "A1","A007" | "A", "AB" |
修饰符?可以匹配0个或1个字符:"A\d?",先匹配字母A,再匹配0个或1个数字 | "A","A1" | "A12","AB" |
修饰符{n}可以匹配n个字符:"\d{6}" | "123456", "999999" | "12345","1234567", "12345A" |
修饰符{m,n},可以匹配m-n个字符"\d{3,5}" | "123", "12345" | "12","12345", "123A5" |
修饰符{n,}可以匹配至少n个字符:"\d{3,}" | "123", "1234", "123456789" | "12","123A" |
package com.testRegex;
public class Telephone {
public static Boolean invaildTel(String s) {
return s.matches("\\d{3,4}\\-\\d{6,8}");
}
}
package com.testRegex;
import static org.junit.Assert.*;
import org.junit.Test;
public class TelephoneTest {
@Test
public void testInvaildTel() {
assertTrue(Telephone.invaildTel("010-123456"));
assertTrue(Telephone.invaildTel("010-12345678"));
assertTrue(Telephone.invaildTel("0123-123456"));
assertTrue(Telephone.invaildTel("0123-12345678"));
assertTrue(Telephone.invaildTel("123-123456"));
assertTrue(Telephone.invaildTel("123-12345678"));
assertFalse(Telephone.invaildTel("010#123456"));
assertFalse(Telephone.invaildTel("010X12345678"));
assertFalse(Telephone.invaildTel("01-12345678"));
assertFalse(Telephone.invaildTel("01234-12345678"));
assertFalse(Telephone.invaildTel("01A-12345678"));
assertFalse(Telephone.invaildTel("0123-12345"));
assertFalse(Telephone.invaildTel("0123-12345X"));
assertFalse(Telephone.invaildTel("0123-123456789"));
assertFalse(Telephone.invaildTel("0123-12345678X"));
}
}