正则表达式是由普通字符(如英文字母)以及特殊字符(也称元字符)字符的文字模式给出一个匹配模板。专门用于操作字符串,可以简化对字符串的复杂操作。
定义
基本书写符号
| 符号 | 解释 | 示例 | 解释 |
| 转义符 | * | 符号"*" | |
| [ ] | 可接收的字符串列表 | [efgh] | e、f、g、h中的任意一个字符 |
| [^] | 不接收的字符串列表 | [^abc] | 除a、b、c之外的任意1个字符,包括数字和特殊符号 |
| | | 匹配" | "之前或之后的表达式 | ab|cd | ab或者cd |
| () | 将子表达式分组 | (abc) | 将字符串abc作为一组 |
| - | 连字符 | A-Z | 任意单个大写字母 |
限定符
限定符将可选数量的数据添加到正则表达式
| 符号 | 含义 | 示例 | 示例 |
| * | 指定字符重复0次或n次 | (abc)* | 仅包含任意个abc的字符串,等效于w* |
| + | 指定字符重复1次或n次 | m+(abc)* | 以至少1个m开头,后接任意个abc的字符串 |
| ? | 指定字符重复0次或1次 | m+abc? | 以至少1个m开头,后接ab或abc的字符串 |
| {n} | 只能输入n个字符 | [abcd]{3} | 由abcd中字母组成的任意长度为3的字符串 |
| {n,} | 指定至少n个字符 | [abcd]{3,} | 由abcd中字母组成的任意长度不小于3的字符串 |
| {n,m} | 指定至少 n 个但不多于 m 个匹配 | [abcd]{3,5} | 由abcd中字母组成的任意长度不小于3,不大于5的字符串 |
| ^ | 指定起始字符 | ^[0-9]+[a-z]* | 以至少1个数字开头,后接任意个小写字母的字符串 |
| $ | 指定结束字符 | ^[0-9]-[a-z]+$ | 以1个数字开头后接连字符“–”,并以至少1个小写字母结尾的字符串 |
匹配字符集
匹配字符集时预定义的用于正则表达式中的符号集。如果字符串与字符集中的任何一个字符相匹配,它就会找到这个正则表达式中的部分匹配字符集
| 符号 | 含义 | 示例 | 示例 |
| . | 匹配除 n 以外的任何字符 | a..b | 以a开头,b结尾,中间包括2个任意字符的长度为4的 |
| d | 匹配单个数字字符,相当于[0-9] | d{3}(d)? | 包含3个或4个数字的字符串 |
| D | 匹配单个非数字字符,相当于[^0-9] | D(d)* | 以单个非数字字符开头,后接任意个数字字符串 |
| w | 匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z] | d{3}w{4} | 以3个数字字符开头的长度为7的数字字母字符串 |
| W | 匹配单个非数字、大小写字母字符,相当于[^0-9a-zA-Z] | W+d{2} | 以至少1个非数字字母字符开头,2个数字字符结尾的 |
转义符: 表示把原本的斜杆转义,举例d表示所有数字,但在实际应用中需要写成\d
常用正则表达式举例
非负整数:“^d+$ ”
正整数:“ ^[0-9]*[1-9][0-9]*$”
非正整数:“ ^((-d+)|(0+))$”
整数:“ ^-?d+$”
英文字符串:“ ^[A-Za-z]+$”
英文字符数字串:“ ^[A-Za-z0-9]+$”
英文数字加下划线串:“^w+$”
E-mail地址:“^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$”
URL: “^[a-zA-Z]+://(w+(-w+)*)(.(w+(-w+)*))*(?s*)?$”
d:匹配一个数字字符,即0-9当中的一个
D:匹配一个非数字字符
w:匹配任意一个数字、字母、下划线
W:匹配所有w不匹配的字符
s:匹配空的字符、包括空格、制表符、换页符等
S:匹配所有s不匹配的字符
.:匹配除换行(n)之外的所有字符,1个.仅能匹配一个字符
Java正则表达式Pattern和Matcher
-
//假设一个文本 String content = "admin,1985年4月13日出生。随着years的流逝12346547很快就得十分恐怖附近的数据库happy吼吼beyond这几样是6786"; //找到文本中所有的英文"[a-zA-Z]+" //找到文本中所有的数字"[0-9]+" //找到文本中所有的英文和数字"([a-zA-Z]+)|([0-9]+)" //先创建一个Pattern对象,模式对象,可以理解成就是一个正则表达式对象 Pattern pattern = Pattern.compile("[a-zA-Z]+"); //创建一个匹配器对象 Matcher matcher = pattern.matcher(content); //理解:就是matcher匹配器按照pattern(模式/样式)到content文本中去匹配,找到就返回true,否则就返回 //false //可以开始循环匹配 while(){ //匹配内容文本放到matcher.group(0)中去 System.out.println("找到:" + matcher.group(0)); }



