Java-正则表达式-入门与简单使用
Java-正则表达式-入门与简单使用
引子
别忘了import java.util.regex.*;
别忘了import java.util.regex.*;
别忘了import java.util.regex.*;
什么是正则表达式?
——专门用于操作字符串的技术,并且可以简化代码,用于对字符串的复杂操作。
正则表达式的优势?
——在Java中引入正则表达式的概念来解决对字符串的操作,且可以简化代码。
是字符串处理的神器。
正则表达式的弊端?
——代码可读性比较差。
多说无益,我们直接看几个例子来大致了解一下正则表达式。
例子1:
boolean flag = QQ.matches("[1-9][0-9]{4,11}");
这行代码可以完成对一串数字是否满足QQ号要求的检查,要求如下:
- 第一位不能是零;2、QQ号码在5到12之间(包含);3、QQ号码都是由数字组成;
例子2:
String tel = "13628123409"; 引号内可以是任意一串数字
String telReg = "1[358]\\d{9}";
System.out.println(tel.matches(telReg));
上述代码可以检查tel是否满足手机号码必须是11位数,而且必须是13、15、18开头的要求。
正则表达式主要有以下三个功能:
1). 字符串匹配
2). 字符串切割
3). 字符串替换
1). 字符串查找和获取
基础知识
双斜杠 // 的使用:
对java的解释器来说,在反斜线字符(/)前的字符有特殊的含义。因此需要用双反斜线字符(//)。此外圆括号在正则表达中两层含义,如果想让它解释为字面上意思(即圆括号),也需要在它前面用双反斜线字符(/)。
几个正则表达式的匹配规则表:
代码 | 说明 | |
. | 匹配除换行符以外的任意字符 | |
\w | 匹配字母或数字或下划线或汉字 | |
\s | 匹配任意的空白符 | |
\d | 匹配数字 | |
^ | 匹配字符串的开始 | |
$ | 匹配字符串的结束 | |
\b | 匹配字符串的结束 | |
代码/语法 | 说明 | |
* | 重复零次或更多次 | |
+ | 重复一次或更多次 | |
? | 重复零次或一次 | |
{n} | 重复n次 | |
{n,} | 重复n次或更多次 | |
{n,m} | 重复n到m次 | |
代码/语法 | 说明 |
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
语法 | 说明 |
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
语法 | 说明 |
\xhh | 十六进制值为0xhh的字符 |
\uhhhh | 十六进制表示为0xhhhh的Unicode字符 |
\t | 制表符Tab |
\n | 换行符 |
\r | 回车 |
\f | 换页 |
\e | 转义(Escape) |
字符串匹配
需要使用String中的matches(); 函数,可以判断字符串对象是否匹配正则表达式。
1)如果匹配,则返回true;
2)如果不匹配,则返回false;
例子1:
String str = "123456789";
String reg = "\\d+";
boolean b= str.matches(reg);
System.out.println(b);
即用正则表达式来判断字符串中是否全部是数字
例子2:
String tel = "13628123409";
String telReg = "1[358]\\d{9}";
System.out.println(tel.matches(telReg));
用于匹配13、15、18开头的11位数手机号码。
在"1[358]\\d{9}"中:
"1"表示第一位只能是数字1,
[358]表示第二位的之可以取"358"中的任意一个,
"{9}"表示\d有9位,也就是说数字有几位。
字符串切割
String str = "erkkrkwjgggcbvnbbbunno";
String reg = "(.)\\1+";
String[] arr = str.split(reg);
System.out.println("切割得到的长度是:" + arr.length);
for(final String s : arr) {
System.out.println(s);
}
结果:
字符串替换
使用 replaceAll() 函数。
例子:
String str = "寻寻觅觅冷冷清清,凄凄惨惨戚戚,乍暖还寒时候,最难将息";
str = str.replaceAll("(.)\\1+","$1");
System.out.println(str);
结果:
寻觅冷清,凄惨戚,乍暖还寒时候,最难将息
字符串查找和获取
调用Pattern类matcher函数,str作为字符串,生成一个匹配器对象matcher;
调用Matcher类中find()函数去字符串str中查找根据指定的正则表达式的结果,找到返回结果true,找不到返回false;
package new1;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Zhengzedemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "寻寻觅觅冷冷清清,凄凄惨惨戚戚,110011,乍暖还寒时候,最难将息";
str = str.replaceAll("(.)\\1+","$1");
System.out.println(str);
String regex="\\d{3}";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
if(m.find()) {
System.out.println("嘿嘿嘿");
}
}
}
结果:
寻觅冷清,凄惨戚,101,乍暖还寒时候,最难将息
嘿嘿嘿
将regex内换成需要的正则,套用这套代码,即可完成正则表达式的字符串查找。
利用while语句,可以将查找到的字符串提取出来
package new1;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Zhengzedemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "abc 124 ewqeq qeqe qeqe qeqe aaaa fs fsdfs d sf sf sf sf sfada dss dee ad a f s f sa a'lfsd;'l";
Pattern pt = Pattern.compile("\\b\\w{3}\\b");
Matcher match = pt.matcher(str);
while (match.find()) {
System.out.println(match.group());
}
}
}
结果:
abc
124
dss
dee
希望这些能给予你一点帮助。
浙公网安备 33010602011771号