1. 常见的转义字符
字母前面加上反斜线 "\" 来表示常见的那些不能显示的ASCII字符.称为转义字符。如 \0, \t, \n 等。
转义字符 | 意义 | ASCII码值(十进制) |
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符''\' | 092 |
\' | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
2. 正则表达式中的特殊字符
在表达式中有特殊意义,需要在它前面添加 "\" 才能当作普通文本字符来使用。
使用正则表达式regex匹配特殊字符(2种方法记忆):
方法1:首先加"\"匹配该特殊字符本身,然后在转义字符(即"\")前加"\"
方法2:在特殊字符前加"\\"(或者使用[]),特别的"\"需要使用"\\\\"来匹配
字符 | 说明 | input | regex1 | regex2 |
^ | 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^" | "^" | \\^ | [^] |
$ | 匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$" | "$" | \\$ | [$] |
. | 匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\." | "." | \\. | [.] |
[ ] | 用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]" | "[" | \\[ | [\\[] |
* | 修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*" | "*" | \\* | [*] |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。 | "\\" | \\\\ | |
? | 修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?" | "?" | \\? | [?] |
+ | 修饰匹配次数为至少 1次。要匹配 "+" 字符本身,请使用 "\+" | "+" | \\+ | [+] |
{ } | 修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}" | "{" | \\{ | [{] |
| | 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|" | "|" | \\| | [|] |
( ) | 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)" | "(" | \\( | [(] |
3. java中使用正则表达式的情况
(1) String
public boolean matches(String regex)
public String replaceAll(String regex, String replacement)
public String replaceFirst(String regex, String replacement)
public String[] split(String regex)
(2) Pattern
public static Pattern compile(String regex)
public static boolean matches(String regex, CharSequence input)
典型的调用顺序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
在仅使用一次正则表达式时
boolean b = Pattern.matches("a*b", "aaaaab");
java 示例
/**
* @title 密码验证,规则:长度8~30,不能含有#和空格,至少含有数字、大写、小写、特殊字符中的3
* 种
* @param password
* @return boolean
*/
private static boolean validatePassword(String password) {
if (StringUtils.isBlank(password)) {
return false;
}
// 长度8~30
if (password.length() < 8 || password.length() > 30) {
return false;
}
// 不能含有#和空格
if (password.contains("#") || password.contains(" ")) {
return false;
}
int typecount = 0;
// 如果含有数字
if (Pattern.matches(".*[0-9]+.*", password)) {
typecount++;
}
// 如果含有大写字母
if (Pattern.matches(".*[A-Z]+.*", password)) {
typecount++;
}
// 如果含有小写字母
if (Pattern.matches(".*[a-z]+.*", password)) {
typecount++;
}
// 如果含有特殊字符
if (Pattern.matches(".*[^A-Za-z0-9]+.*", password)) {
typecount++;
}
// 至少含有数字、大写、小写、特殊字符中的3种
if (typecount < 3) {
return false;
}
return true;
}