转义字符,正则表达式,特殊字符,模式匹配

£可爱£侵袭症+ 提交于 2020-02-13 07:14:42

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)以外的任意一个字符。要匹配小数点本身,请使用 "\."

"."

\\.

[.]

[ ]

用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"

"["

\\[

[\\[]

*

修饰匹配次数为次或任意次。要匹配 "*" 字符本身,请使用 "\*"

"*"

\\*

[*]

\

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。

"\\"

\\\\

 

?

修饰匹配次数为次或 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 示例

 1     /**
 2      * @title 密码验证,规则:长度8~30,不能含有#和空格,至少含有数字、大写、小写、特殊字符中的3种
 3      * @param password
 4      * @return boolean
 5      */
 6     private static boolean validatePassword(String password) {
 7         if (StringUtils.isBlank(password)) {
 8             return false;
 9         }
10         // 长度8~30
11         if (password.length() < 8 || password.length() > 30) {
12             return false;
13         }
14         // 不能含有#和空格
15         if (password.contains("#") || password.contains(" ")) {
16             return false;
17         }
18         int typecount = 0;
19         // 如果含有数字
20         if (Pattern.matches(".*[0-9]+.*", password)) {
21             typecount++;
22         }
23         // 如果含有大写字母
24         if (Pattern.matches(".*[A-Z]+.*", password)) {
25             typecount++;
26         }
27         // 如果含有小写字母
28         if (Pattern.matches(".*[a-z]+.*", password)) {
29             typecount++;
30         }
31         // 如果含有特殊字符
32         if (Pattern.matches(".*[^A-Za-z0-9]+.*", password)) {
33             typecount++;
34         }
35         // 至少含有数字、大写、小写、特殊字符中的3种
36         if (typecount < 3) {
37             return false;
38         }
39         return true;
40     }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!