黑马程序员 JAVA学习笔记 —— 正则表达式
2014-05-16 15:27
399 查看
android培训、java培训、期待与您交流!
正则表达式:既是一种规则的表达式
作用:用于操作字符串 将用对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。
学习正则表达式就是在学习 特殊符号的使用。
好处:可以简化代码的书写
坏处:阅读性比较差
摘自 API1.6
public static void main(String[] args) {
// TODO Auto-generated method stub
String nub = "19";//测试用字符
String rul = "[1][9]";//正则规则
String rul1 = "[1][7]";//第二条正则规则
boolean b = nub.matches(rul);
boolean b1 = nub.matches(rul1);
System.out.println(b+" "+b1);//一对一错进行比对
}
注:一个[ ]对应字符串中的一位。
有第一个[1]与字符串中第一位1对应所以继续匹配[9]与9匹配所以b返回true b1返回false
2.分割:String split方法 用于规则分割字符串
public static void main(String[] args) {
// TODO Auto-generated method stub
String s0="Gandam Gandam_Z Gandam_ZZ";//测试用字符串1 切多个空格
String s1="nihao,woshi,lihaiyun";//测试2 切逗号
String s2="bbs.itheima.com";//测试3 切特殊符号.
String s3="E:\\黑马程序员\\视频";//测试4 切双反斜杠
String s4="qwerwwkfxxpoffaq";//测试5 切双字符
String rul0=" +";
String rul1=",";
String rul2="\\.";
String rul3="\\\\";
String rul4="(.)\\1";
String[] arr=s0.split(rul0);
show(arr);
arr=s1.split(rul1);
show(arr);
arr=s2.split(rul2);
show(arr);
arr=s3.split(rul3);
show(arr);
arr=s4.split(rul4);
show(arr);
}
static void show(String[] x)
{ for(String test:x)
{System.out.println(test);}}
}
注: +表示一次或多次出现 我前面打了空格 代表 空格一次或多次出现
//.第一个/表示在字符串中的转义第二个表示正则表达式的转义
()表示组 .表示任意字符 /1表示引用第一个组
3.替换 String replaceAll方法 用于规则替换字符串
public static void main(String[] args) {
// TODO Auto-generated method stub
String s0="a1d3qw45646q4d56q1wd53s1a5wdq313";
s0=s0.replaceAll("\\d+","a");//将所有数字替换成a
System.out.println(s0);
}
如果只是把数字替换掉可以去掉加号
String s0="a1d3qw45646q4d56q1wd53s1a5wdq313";
s0=s0.replaceAll("\\d+","a");//将所有数字替换成a
System.out.println(s0);
s0=s0.replaceAll("(.)\\1","$1");//精叠词替换成一个
System.out.println(s0);
$表示在正则表达式外获取组
4.获取:将字符串中的符合规则的字符串取出。
操作步骤:
1.将正则表达式封装成对象
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的字符串进行操作
public class maches {
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="ming tian yao qu hei ma la";
String rul="\\b[a-z]{3}\\b";
Pattern p=Pattern.compile(rul);//将规则封装成对象
Matcher m=p.matcher(s);//让正则对象和要操作的字符串相关联
//其实String类中的matches方法,用的就是pattern和matcher对象来完成的。
//只不过是被封装了。用起来较为简单。
while(m.find())
{System.out.println(m.group()+" "+m.start()+"..."+m.end());}
}
注:/b表示单词边界。find表示将规则作用到字符串上,并进行符合规则的字串查找。 group表示得到第一个符合规则正则的字串。并返回。start end表示得到符合规则正则的字串的起始下标
和结束下标
正确使用正则表达式的方法
1.如果只想知道该字符是否对错 使用匹配
2.想要将已有的字符串变成另一个字符串 替换
3.想要按照自定义的方式将字符串变成多个字符串 用切割 获取规则以外的字符串
4.想要拿到符合要求的字符串 用获取 获取符合规则的字符串
总而言之正则表达式 作为字符串操作工具十分的便捷 就是时间格的久了 再看会比较麻烦 学起记得符合很多 但熟练以后会发现比起String里的方法好用多了 特便是简化代码方面。
android培训、java培训、期待与您交流!
正则表达式:既是一种规则的表达式
作用:用于操作字符串 将用对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。
学习正则表达式就是在学习 特殊符号的使用。
好处:可以简化代码的书写
坏处:阅读性比较差
正则表达式的构造摘
摘自 API1.6构造 | 匹配 |
---|---|
字符 | |
x | 字符 x |
\\ | 反斜线字符 |
\0n | 带有八进制值 0 的字符 n (0 <= n <= 7) |
\0nn | 带有八进制值 0 的字符 nn (0 <= n <= 7) |
\0mnn | 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7) |
\xhh | 带有十六进制值 0x 的字符 hh |
\uhhhh | 带有十六进制值 0x 的字符 hhhh |
\t | 制表符 ('\u0009') |
\n | 新行(换行)符 ('\u000A') |
\r | 回车符 ('\u000D') |
\f | 换页符 ('\u000C') |
\a | 报警 (bell) 符 ('\u0007') |
\e | 转义符 ('\u001B') |
\cx | 对应于 x 的控制符 |
字符类 | |
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]] | a 到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]] | d、e 或 f(交集) |
[a-z&&[^bc]] | a 到 z,除了 b 和 c:[ad-z](减去) |
[a-z&&[^m-p]] | a 到 z,而非 m 到 p:[a-lq-z](减去) |
预定义字符类 | |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
具体操作功能:
1.匹配:String matches方法 用于规则匹配整个字符串 只要有一处 不符就匹配结束返回false
例:
public static void main(String[] args) {// TODO Auto-generated method stub
String nub = "19";//测试用字符
String rul = "[1][9]";//正则规则
String rul1 = "[1][7]";//第二条正则规则
boolean b = nub.matches(rul);
boolean b1 = nub.matches(rul1);
System.out.println(b+" "+b1);//一对一错进行比对
}
注:一个[ ]对应字符串中的一位。
有第一个[1]与字符串中第一位1对应所以继续匹配[9]与9匹配所以b返回true b1返回false
2.分割:String split方法 用于规则分割字符串
public static void main(String[] args) {
// TODO Auto-generated method stub
String s0="Gandam Gandam_Z Gandam_ZZ";//测试用字符串1 切多个空格
String s1="nihao,woshi,lihaiyun";//测试2 切逗号
String s2="bbs.itheima.com";//测试3 切特殊符号.
String s3="E:\\黑马程序员\\视频";//测试4 切双反斜杠
String s4="qwerwwkfxxpoffaq";//测试5 切双字符
String rul0=" +";
String rul1=",";
String rul2="\\.";
String rul3="\\\\";
String rul4="(.)\\1";
String[] arr=s0.split(rul0);
show(arr);
arr=s1.split(rul1);
show(arr);
arr=s2.split(rul2);
show(arr);
arr=s3.split(rul3);
show(arr);
arr=s4.split(rul4);
show(arr);
}
static void show(String[] x)
{ for(String test:x)
{System.out.println(test);}}
}
注: +表示一次或多次出现 我前面打了空格 代表 空格一次或多次出现
//.第一个/表示在字符串中的转义第二个表示正则表达式的转义
()表示组 .表示任意字符 /1表示引用第一个组
Greedy 数量词 | |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
引用 | |
---|---|
\ | Nothing,但是引用以下字符 |
\Q | Nothing,但是引用所有字符,直到 \E |
\E | Nothing,但是结束从 \Q 开始的引用 |
public static void main(String[] args) {
// TODO Auto-generated method stub
String s0="a1d3qw45646q4d56q1wd53s1a5wdq313";
s0=s0.replaceAll("\\d+","a");//将所有数字替换成a
System.out.println(s0);
}
如果只是把数字替换掉可以去掉加号
String s0="a1d3qw45646q4d56q1wd53s1a5wdq313";
s0=s0.replaceAll("\\d+","a");//将所有数字替换成a
System.out.println(s0);
s0=s0.replaceAll("(.)\\1","$1");//精叠词替换成一个
System.out.println(s0);
$表示在正则表达式外获取组
4.获取:将字符串中的符合规则的字符串取出。
操作步骤:
1.将正则表达式封装成对象
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的字符串进行操作
public class maches {
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="ming tian yao qu hei ma la";
String rul="\\b[a-z]{3}\\b";
Pattern p=Pattern.compile(rul);//将规则封装成对象
Matcher m=p.matcher(s);//让正则对象和要操作的字符串相关联
//其实String类中的matches方法,用的就是pattern和matcher对象来完成的。
//只不过是被封装了。用起来较为简单。
while(m.find())
{System.out.println(m.group()+" "+m.start()+"..."+m.end());}
}
注:/b表示单词边界。find表示将规则作用到字符串上,并进行符合规则的字串查找。 group表示得到第一个符合规则正则的字串。并返回。start end表示得到符合规则正则的字串的起始下标
和结束下标
正确使用正则表达式的方法
1.如果只想知道该字符是否对错 使用匹配
2.想要将已有的字符串变成另一个字符串 替换
3.想要按照自定义的方式将字符串变成多个字符串 用切割 获取规则以外的字符串
4.想要拿到符合要求的字符串 用获取 获取符合规则的字符串
总而言之正则表达式 作为字符串操作工具十分的便捷 就是时间格的久了 再看会比较麻烦 学起记得符合很多 但熟练以后会发现比起String里的方法好用多了 特便是简化代码方面。
android培训、java培训、期待与您交流!
相关文章推荐
- 黑马程序员——java学习笔记--正则表达式
- 黑马程序员 java学习笔记——正则表达式
- 黑马程序员java学习笔记——正则表达式、反射
- 黑马程序员--Java基础学习笔记【正则表达式、常用API】
- 黑马程序员 java学习笔记--正则表达式
- 黑马程序员 java学习笔记 Day8:正则表达式
- 黑马程序员_Java正则表达式学习笔记
- 黑马程序员——学习笔记13.Java正则表达式
- 黑马程序员------java学习笔记之正则表达式
- java 学习笔记之正则表达式
- 黑马程序员_Java学习日记21_正则表达式
- 黑马程序员--正则表达式学习笔记
- 黑马程序员_正则表达式学习笔记(1)
- 黑马程序员_JAVA笔记25——正则表达式
- java学习笔记06--正则表达式
- java学习笔记06--正则表达式
- Java学习笔记之正则表达式
- Java学习笔记之Pattern类的用法详解(正则表达式)
- 黑马程序员java笔记之七-----正则表达式
- 【Java学习笔记】正则表达式