Java--正则表达式

来源:互联网 发布:生死狙击矩阵 编辑:程序博客网 时间:2024/06/04 18:44

——Java培训、Android培训、iOS培训、.Net培训 期待与您共同交流!——

正则表达式

1. 基本正则表达式

所谓正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式规则,然后使用该格式规则匹配某个字符串是否符合格式要求。

1.1. “.”和”\”

“.”点儿,在正则表达式中标是任意一个字符。
“\”在正则表达式中是转意字符,当我们需要描述一个已经被正则表达式使用的特殊字符时,我们就可以通过使用”\”将其转变为原本的意思。
“\”在正则表达式中也有一些预定义的特殊内容:
\d:表示任意一个数字
\w:表示任意一个单词字符(只能是 数字,字母,下划线)
\s:表示任意一个空白字符(\t \r \n \f \x0B)
\D:表示任意一个非数字字符
\W:表示任意一个非单词字符
\S:表示任意一个非空白字符

1.2. “^”和”$”

通过在正则表达式的开始添加”^”以及末尾添加”$”来表示一个整体。若不使用它们,那么正则表达式只匹配某个字符串的部分内容是否符合格式规则,但使用它们,则要求字符串必须从头到尾都满足该格式规则。
例如:^\w{ 8,10 }$ 表示整体字符串只能出现单词字符8-10个

1.3. “字符集合 []”

“[]”用来描述单一字符,方括号内部可以定义这个字符的内容,也可以描述一个范围。
例如:
当我们需要描述所有小写字母是,我们可以使用范围
同样还可以:
也可以在多个范围内选择:

1.4. “*”、”+”、”?”

通常我们需要描述的字符串会有很多重复出现的元素,但又不需要严格限制出现的次数时,我们就可以使用”*”,”+”这些量词。
例如:邮箱地址,那么在”@”字符前允许出现若干字符作为用户名。这时候我们就可以使用”\w+”来描述这里至少出现一个单词字符了。
“+”:表示内容可以连续出现至少1次以上
“*”:表示内容出现0-若干次
“?”:表示内容出现0-1次

1.5. {n}、{n,}{n,m}

除了3.1.4中讲到的量词外,有时我们也需要要求内容出现的次数有具体要求。比如手机号码。这时我们要求出现的数字就不能是一个模糊的概念了,而必须要求11位。又比如我们要求用户输入密码时,要求密码是6-15位。遇到这类问题是,我们可以使用:
{n}:表示内容必须出现n次
{n,m}:表示内容出现n-m次
{n,}:表示内容出现至少n次
例如:
\d{11}:就表示数字只能出现11位,这样就解决了上述的问题。

1.6. 分组

通过上面的内容,我们还无法解决类似下面的问题:
在描述电话号码时,前面有区号,区号的形式可以是0086或者+86
那么我们如何在这两个字符串之间选择?
这时我们可以使用分组”()”
():可以将内容看做一个整体
()中可以使用”|”来表示或关系。例如:
(+86|0086):表示这里可以是+86或者0086。

2. String正则相关API

2.1. matches方法

matches()方法的参数要求我们传入一个用字符串描述的正则表达式,然后使用该正则表达式描述的字符串格式规则来匹配当前字符串,若满足那么该方法返回true。否则返回false.
例如:

String emailRegEx ="^[a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}$";String email ="bjliyi@tarena.com.cn";System.out.println(email.matches(emailRegEx));//true

2.2. split方法

String[] split(String regex):参数要求传入一个用字符串描述的正则表达式,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并按照满足的部分将字符串拆分。
例如:

String str ="java,c#,php,javascript";String[] array = str.split(",");//[java,c#,php,javascript]System.out.println(Arrays.toString(array));

2.3. replaceAll方法

String replaceAll(String regex,String replacement):参数要求传入一个用字符串描述的正则表达式和一个需要替换的字符串,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并将满足的部分替换为需要替换的这个字符串。
例如:

String str ="abc123bcd45ef6g7890";;str = str.replaceAll("\\d+","数字");System.out.println(str);//abc数字bcd数字ef数字g数字
0 0