一、需求
现有一个字符串,需满足如下要求:
① [6, 18] 个字符
② 只能包含字母、数字、下划线
③ 需以字母开头如果字符串满足上述要求,返回 true,否则返回 false
1 2 3 | public static boolean validString(String s) { return s.matches( "[a-zA-Z][a-zA-Z0-9_]{5,17}" ); } |
正则表达式用极简的规则取代了复杂的验证逻辑
Regex Expression
正则表达式是一种通用的技术,适用于多种编程语言
二、单字符匹配(6个)
①
[abc]
:字符串的某个位置(某一个字符)满足 a、b、c 中的一个
![]()
某个位置
:该【单字符匹配】放的位置
1 2 3 4 5 6 7 8 9 | public class TestDemo { public static void main(String[] args) { String regex = "[zgq]" ; System.out.println( "z" .matches(regex)); // true System.out.println( "g" .matches(regex)); // true System.out.println( "q" .matches(regex)); // true System.out.println( "zgq" .matches(regex)); // false } } |
1 2 3 4 5 6 7 8 | public class TestDemo { public static void main(String[] args) { String regex = "26[abc]3q" ; System.out.println( "26a3q" .matches(regex)); // true System.out.println( "26abc" .matches(regex)); // false System.out.println( "26b3q" .matches(regex)); // true } } |
②
[^abc]
:除了 a、b、c 之外的任意单个字符
1 2 3 4 5 6 7 8 9 10 | public class TestDemo { public static void main(String[] args) { String regex = "[^cat]666" ; System.out.println( "c666" .matches(regex)); // false System.out.println( "a666" .matches(regex)); // false System.out.println( "t666" .matches(regex)); // false System.out.println( "bb666" .matches(regex)); // false System.out.println( "b666" .matches(regex)); // true } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class TestDemo { public static void main(String[] args) { String regex1 = "[12345]666" ; String regex2 = "[^1-5]666" ; System.out.println( "1666" .matches(regex1)); // true System.out.println( "3666" .matches(regex1)); // true System.out.println( "5666" .matches(regex1)); // true System.out.println( "6666" .matches(regex1)); // false System.out.println( "1666" .matches(regex2)); // false System.out.println( "3666" .matches(regex2)); // false System.out.println( "5666" .matches(regex2)); // false System.out.println( "6666" .matches(regex2)); // true } } |
③
[a-zA-z]
:匹配单个英文字母
1 2 3 4 5 6 7 | public class TestDemo { public static void main(String[] args) { String regex = "[a-zA-Z]666" ; System.out.println( "6666" .matches(regex)); // false System.out.println( "b666" .matches(regex)); // true } } |
④
[a-d[1-6]]
:和 [a-d1-6]
一样(并集)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class TestDemo { public static void main(String[] args) { String regex1 = "[a-d[1-6]]" ; String regex2 = "[a-d1-6]" ; System.out.println( "a" .matches(regex1)); // true System.out.println( "e" .matches(regex1)); // false System.out.println( "1" .matches(regex1)); // true System.out.println( "7" .matches(regex1)); // false System.out.println( "a" .matches(regex2)); // true System.out.println( "e" .matches(regex2)); // false System.out.println( "1" .matches(regex2)); // true System.out.println( "7" .matches(regex2)); // false } } |
⑤
[zgq&&[god]]
:交集
1 2 3 4 5 6 7 8 | public class TestDemo { public static void main(String[] args) { String regex1 = "[zgq&&[god]]" ; System.out.println( "q" .matches(regex1)); // false System.out.println( "d" .matches(regex1)); // false System.out.println( "g" .matches(regex1)); // true } } |
⑥
[zgq&&[god]]
:取差集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class TestDemo { public static void main(String[] args) { String regex1 = "[zgq&&[^god]]" ; System.out.println( "q" .matches(regex1)); // true System.out.println( "d" .matches(regex1)); // false System.out.println( "g" .matches(regex1)); // false System.out.println( "z" .matches(regex1)); // true // 取差集, 从字母 a 到字母 z 中去除字母 b 和 d String regex2 = "[a-z&&[^bd]]" ; System.out.println( "d" .matches(regex2)); // false System.out.println( "a" .matches(regex2)); // true } } |
三、预定义字符(7个)
预定义字符匹配的仍然是单个字符
【.】:任意单个字符
【d】:数字
【D】:非数字
【s】:空白
【S】:非空白
【w】:字母(英文字母、下划线、数字)
【W】:非英文字母
Java 中需以两个【】开头表示预定义字符
1 2 3 4 5 6 7 8 9 10 | public class TestDemo { public static void main(String[] args) { String r1 = "." ; System.out.println( "@" .matches(r1)); // true System.out.println( "庆" .matches(r1)); // true System.out.println( "I" .matches(r1)); // true System.out.println( " " .matches(r1)); // true System.out.println( "." .matches(r1)); // true } } |
1 2 3 4 5 6 7 8 9 | public class TestDemo { public static void main(String[] args) { // 匹配 java 文件 String r1 = ".\.java" ; System.out.println( "a.java" .matches(r1)); // true System.out.println( "xjava" .matches(r1)); // false System.out.println( "5java" .matches(r1)); // false } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class TestDemo { public static void main(String[] args) { String r1 = "[abc]" ; String r2 = "\[abc\]" ; System.out.println( "a" .matches(r1)); // true System.out.println( "c" .matches(r1)); // true System.out.println( "[abc]" .matches(r1)); // false System.out.println( "a" .matches(r2)); // false System.out.println( "c" .matches(r2)); // false System.out.println( "[abc]" .matches(r2)); // true } } |
到此这篇关于Java 中的正则表达式(单字符匹配和预定义字符)的文章就介绍到这了,更多相关java正则表达内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!