这里面大部分内容来自黑马视频, 弄进来方面以后直接拷贝调用。
常见规则
A:字符x 字符 x。举例:'a'表示字符a
\\ 反斜线字符。
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
B:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括 \d
C:预定义字符类
. 任何字符。我的就是.字符本身,怎么表示呢? \.
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须有这些东西组成
D:边界匹配器
^ 行的开头 匹配字符串的开头。如,"abc".matches("^a.*");返回true。
$ 行的结尾 匹配字符串的结尾。如,"abc".matches("abc$");返回true。
\b 单词边界 举列:1,rex =magic ; welcome to nowamagic thismagic place!
,2, rex =\bmagic\b ;welcome to nowamagic this magic place!
这个正则匹配,必须以m开头,以c为结尾的字符串。
举例:hello world?haha;xixi
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
常见功能:(分别用的是谁呢?)
A:判断功能
String类的public boolean matches(String regex)
一,校验qq号码.
* 1: 要求必须是5-15位数字
* 2: 0不能开头
public static boolean checkQQ(String qq) {
// String regex ="[1-9][0-9]{4,14}" // 规则。
return qq.matches("[1-9]\\d{4,14}");
}
二,校验手机号码.
* 1: 要求11位数字
* 2: 1开头
public static boolean checkPhone(String phone) {三,校验邮箱.
// String regex ="1[385769]\\d{9}" // 规则。
return phone.matches("1[385769]\\d{9}");
}
* 1:aaa@qq.com
aaa@sina.com.cn
* aaa@126.cn
public static boolean checkMail(String mail) {
// String regex ="[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+" // 规则。
return mail.matches("[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+");
}
B:分割功能
String类的public String[] split(String regex)
一:根据一个符号分割。
// 定义一个字符串String s3 = "aa bb cc";
String s1 = "<span style="color:#FF0000;">aa,bb,cc</span>";
// 直接分割
String[] str1Array = s1.split("<span style="color:#FF0000;">,</span>");
for (int x = 0; x < str1Array.length; x++) {
System.out.println(str1Array[x]);
}
结果: <span style="color:#FF0000;">aa
bb
cc
</span><pre name="code" class="java"><span style="color:#000000;">
// 定义一个字符串
String s2 = "<span style="color:#FF0000;">aa.bb.cc</span>";
// 直接分割
String[] str1Array = s1.split("<span style="color:#FF0000;">\\.</span>"); //<span style="color:#FF0000;"> 点分割要转义</span>
for (int x = 0; x < str1Array.length; x++) {
System.out.println(str1Array[x]);
}
结果:<span style="color:#FF0000;"> aa
bb
cc </span></span>
String[] str3Array = s3.split(" +"); // 多空格分割
for (int x = 0; x < str3Array.length; x++) {
System.out.println(str3Array[x]);
}
<pre name="code" class="java"><span style="color:#000000;"> 结果:<span style="color:#FF0000;"> aa//硬盘上的路径,我们应该用\\替代\
bb
cc </span></span>
String s4 = "E:\\\\ day14 \\avi";
String[] str4Array = s4.split("\\\\");
for (int x = 0; x < str4Array.length; x++) {
System.out.println(str4Array[x]);
}
System.out.println("---------------------");
<span style="color:#FF0000;"></span><pre name="code" class="java"><pre name="code" class="java"><span style="color:#000000;"> 结果:<span style="color:#FF0000;"> <span style="font-size:18px;"></span></span></span><pre name="code" class="java"><span style="color:#FF0000;"><span style="color:#000000;"><span style="color:#FF0000;"> E:</span></span></span> <pre name="code" class="java"><span style="color:#FF0000;"><span style="color:#000000;"><span style="color:#FF0000;"> JavaSE</span></span></span>
<span style="color:#FF0000;"><span style="color:#000000;"><span style="color:#FF0000;"> day14</span></span></span>
<span style="color:#FF0000;"><span style="color:#000000;"><span style="color:#FF0000;"> avi</span></span></span>
C:替换功能
String类的public String replaceAll(String regex,String replacement)
// 定义一个字符串
String s = "helloqq32312313worfdsf32131232132java";
// 我要去除所有的数字,用*给替换掉
// String regex = "\\d+";
// String regex = "\\d";
//String ss = "*";
// 直接把数字干掉
String regex = "\\d+";
String ss = "";
String result = s.replaceAll(regex, ss);
System.out.println(result);
D:获取功能
Pattern和Matcher
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
find():查找存不存在
group():获取刚才查找过的数据
// 模式和匹配器的典型调用顺序* 获取功能:
// 把正则表达式编译成模式对象
Pattern p = Pattern.compile("a*b");
// 通过模式对象得到匹配器对象,这个时候需要的是被匹配的字符串
Matcher m = p.matcher("aaaaab");
// 调用匹配器对象的功能
boolean b = m.matches();
System.out.println(b);
//这个是判断功能,但是如果做判断,这样做就有点麻烦了,我们直接用字符串的方法做
String s = "aaaaab";
String regex = "a*b";
boolean bb = s.matches(regex);
System.out.println(bb);
}
* 获取下面这个字符串中由三个字符组成的单词
* da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
// 定义字符串
String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
// 规则
String regex = "\\b\\w{3}\\b";
// 把规则编译成模式对象
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(s);
// 调用匹配器对象的功能
// 通过find方法就是查找有没有满足条件的子串
// public boolean find()
// boolean flag = m.find();
// System.out.println(flag);
// // 如何得到值呢?
// // public String group()
// String ss = m.group();
// System.out.println(ss);
//
// // 再来一次
// flag = m.find();
// System.out.println(flag);
// ss = m.group();
// System.out.println(ss);
while (m.find()) {
System.out.println(m.group());
}
// 注意:一定要先find(),然后才能group()
// IllegalStateException: No match found
// String ss = m.group();
// System.out.println(ss);
(4)案例
A:判断电话号码和邮箱
B:按照不同的规则分割数据
C:把论坛中的数字替换为*
D:获取字符串中由3个字符组成的单词
E:判断密码是不是由6-15位的字母和数字组成 ,且不能全是字母会全是数字,
/**
* 判断密码是不是由6-15位的字母和数字组成 ,且不能全是字母会全是数字,
* @author admin
*
*/
public class dadasdasdasd {
public static void main(String[] args) {
String s = "a111addaaaaaaaaaa";
String regex = "([0-9](?=[0-9]*?[a-zA-Z])\\w{5,14})|([a-zA-Z](?=[a-zA-Z]*?[0-9])\\w{5,14})" ;
System.out.println(s.matches(regex));
}
}