黑马程序员-正则表达学习笔记
2015-10-16 14:23
676 查看
----------------------------------------正则表达式----------------------------------------
正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
我们都在Windows下查找过某些文件:
例如:
查找所有的word文档:*.doc
正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求
正则表达式的组成规则:规则字符在java.util.regex Pattern类中
常见组成规则
字符
字符类
预定义字符类
边界匹配器
数量词
正则表达式的字符类:
Java代码
public class Demo {
public static void main(String[] args) {
String str = "had";
//1.字符串中是否以h开头,以d结尾,而且中间只有一个字符,而且是元音字母a、e、i、o、u?
String regex = "h[aeiou]d";
System.out.println("1." + str.matches(regex));
//2.字符串中是否以h开头,以d结尾,而且中间只有一个小写英文字母?
str = "h_d";
regex = "h[a-z]d";
System.out.println("2." + str.matches(regex));
//3.字符串是否以大写英文字母开头,后跟id?
str = "Hid";
regex = "[A-Z]id";
System.out.println("3." + str.matches(regex));
//4.字符串首字母是否非数字?
str = "1id";
regex = "[^0-9]id";
System.out.println("4." + str.matches(regex));
//5.以b 或 c 或 d 开头,中间字符是 a,并且以 d 或 t 结尾 的字符串;
str = "bad";
regex = "[bcd]a[dt]";
System.out.println("5." + str.matches(regex));
}
}
正则表达式的逻辑运算符:
1.&& : 逻辑与(并且)
2.| : 逻辑或(或者)
Java代码
public class Demo {
public static void main(String[] args) {
//1.判断小写辅音字母:
String str = "a";
String regex = "[a-z&&[^aeiou]]";
System.out.println("1." + str.matches(regex));
//2.判断首字母为h 或 H ,后跟一个元音字母,并以 d 结尾:
regex = "[h|H][a|e|i|o|u]d";//效果同:[hH][aeiou]d
}
}
正则表达式中的预定义字符类:
注意:在Java中将反斜线看做转义序列的开头。因此必须在正则表达式中将反斜线指定为:\\:
Java代码
public class Demo {
public static void main(String[] args) {
// 1.判断是否是三位数字:
String str = "014";
String regex = "[0-9][0-9][0-9]";
System.out.println("1." + str.matches(regex));
regex = "\\d\\d\\d";
System.out.println("1-2." + str.matches(regex));
// 2.判断字符串是否以h开头,中间是任何字符,并以d结尾:"h.d"
str = "h\\d";// h\d
regex = "h.d";
System.out.println("2." + str.matches(regex));
// 3.判断字符串是否是”had.”:
str = "had.";
regex = "had\\.";// 或者:"had[.]"
System.out.println("3." + str.matches(regex));
// 4.判断手机号码(1开头,第二位是:3或5或8,后跟9位数字):
str = "18518151175";
regex = "1[358]\\d\\d\\d\\d\\d\\d\\d\\d\\d";
System.out.println("4." + str.matches(regex));
}
}
正则表达式中的限定符:限定符位于模式中子序列的后侧,确定了子序列的重复方式。
伦理片 http://www.dotdy.com/
Java代码 public class Demo {
public static void main(String[] args) {
// 1.判断1位或多位数字:
String str = "14389427584937438294732890574829057489200a";
String regex = "\\d+";
System.out.println("1." + str.matches(regex));
// 2.判断手机号码:
str = "18518151175";
regex = "1[358]\\d{9}";
System.out.println("2." + str.matches(regex));
// 3.判断小数(小数点最多1次)
str = "3324243214.343";
regex = "\\d+\\.?\\d+";
System.out.println("3." + str.matches(regex));
// 4.判断数字(可出现或不出现小数部分):
str = "3.14";
regex = "\\d+(\\.?\\d+)?";
System.out.println("4." + str.matches(regex));
// 5.判断一个QQ号码(5-15位数字,不能以0开头):
str = "1691530430";
regex = "[1-9]\\d{4,14}";
System.out.println("5." + str.matches(regex));
// 6.参考并修改上面第四个例子,使之满足:"22."的格式;
str = ".3";
regex = "\\d+(\\.?\\d*)?";
System.out.println("6." + str.matches(regex));
// 7.满足:+20,-3,22.格式:
str = "20.43274839";
regex = "[+-]?\\d+(\\.?\\d*)?";
System.out.println("7." + str.matches(regex));
}
}
正则表达式的分组:
Java代码
public class Demo {
public static void main(String[] args) {
String str = "DG8FV-B9TKY-FRT9J-6CRCC-X5Q8G";
String regex = "([A-Z0-9]{5}-){4}[A-Z0-9]{5}";
System.out.println("1." + str.matches(regex));
}
}
正则的功能:
切割功能:
使用String类中的split方法。
Java代码
public class Demo {
public static void main(String[] args) {
// A.切割字符串"aa,bb,cc";
String str = "aa,bb,cc";
String[] strArray = str.split("[,]");
for (int i = 0; i < strArray.length; i++) {
System.out.println("--" + strArray[i]);
}
// B.切割字符串"aa.bb.cc";
str = "192.168.100.232";
strArray = str.split("[.]");
for (int i = 0; i < strArray.length; i++) {
System.out.println("--" + strArray[i]);
}
// C.切割字符串“-1 99 4 23”;
str = "-1 99 4 23";
strArray = str.split("[ ]");
for (int i = 0; i < strArray.length; i++) {
System.out.println("--" + strArray[i]);
}
System.out.println("-----------------------------");
// D."-1 99 4 23";
str = "-1 99 4 23";
strArray = str.split("[ ]+");
for (int i = 0; i < strArray.length; i++) {
System.out.println("--" + strArray[i]);
}
}
}
替换功能:
使用String类中的replaceAll方法。
Java代码
public class Demo {
public static void main(String[] args) {
//1.用”#”替换叠:"sdaaafghccccjkqqqqql";
String str = "sdaaafghccccjkqqqqql";
String regex = "(.)\\1+";
System.out.println("将叠词替换为#:" + str.replaceAll(regex, "#"));
//2.把多个叠词变成一个
System.out.println("将叠词变为1个:" + str.replaceAll(regex, "$1"));
//3.:有些论坛不允许发电话,qq号,银行账号等. 把数字用"*"替换
str = "wert13245asfklwyoeworewsfd6744232433fafs";
System.out.println("将数字替换为*符合:" + str.replaceAll("\\d+", "*"));
}
}
获取功能:
使用Pattern.compile(regex)。
Java代码
public class RegexGetDemo {
public static void main(String[] args) {
getStrDemo();
}
/***
* 获取例子
*/
public static void getStrDemo() {
String str = "ming tian jiu yao fang jia le,da jia....";
String regex = "\\b[a-z]{3}\\b";// "\\b":是单词边界标识
str = "12q3233534";
String reg = "[1-9]\\d{4,14}";
// 将规则封装成对象。
Pattern p = Pattern.compile(regex);
// 让正则对像和要作用的字符串相关联,获取匹配器对象。
Matcher m = p.matcher(str);
// 其实String类中的matches()方法。用的就是Pattern和Matcher对象来完成的。
//只不过被String的方法封装后,用起来较为简单,但功能单一,
//matches:是整个字串完全匹配
System.out.println(m.matches());
// 将规则作用到子串上,进行符合规则的字串查找,
boolean b = m.find();
System.out.println(b);
System.out.println(m.group());// 用于获取匹配后结果。
while (m.find()) {
System.out.println(m.group());
// 获取单词的索引位置(含头不含尾)
System.out.println(m.start() + "...." + m.end());
}
}
}
相关文章推荐
- 把想法变成现实-兄弟连IT教育
- 黑马程序员-多线程学习笔记
- 程序员应聘注意事项
- 黑马程序员-反射学习笔记
- 黑马程序员——集合之List
- 【扣丁学堂】IT码农才懂的段子,请笑纳
- 软件测试职业生涯规划
- 程序员神曲 之 .Net自动化项目生成器
- 每个程序员都必须遵守的编程原则
- 黑马程序员——java基础---异常
- 黑马程序员——Java基础---IO---字节流
- Java面试参考指南(二)
- 黑马程序员--java基础日记--基础语法知识
- 常见海量数据处理面试题总结
- 野生程序员的故事
- 程序员常用工具
- Java面试参考指南(一)
- Java常见面试题
- 黑马程序员——this,super,interface,final,abstract,static
- 黑马程序员——异常