黑马程序员——正则表达式
来源:互联网 发布:投稿被怀疑数据造假 编辑:程序博客网 时间:2024/06/05 20:23
正则表达式:符合一定规则的表达式。
作用:用于专门操作字符串。
好处:简化了字符串的复杂操作。
特点:用一些特定的符号来表示一些代码的操作。学习正则表达式就是学习一些特殊符号的使用。
弊端:符号定义越多,正则越长,阅读性越差。
例:检验QQ号是否合法,关键代码如下:
String qq="8491823";
String regex="[1-9][0-9]{4,14}";//正则也是String类对象,此行代码中[1,9]代表qq第一位是1-9的任意一个数字,而[0-9]{4,14}则表示数字0-9在此出现4-14次
boolean flag=qq.matches(regex);
“\d”指的是数字,"\\d":在正则表达式中,反斜杠都是成对出现的!
正则表达式的具体操作如下:
1.匹配:
str1.matches(regex);//上述例子中就有描述
2.切割·:
String[] split(String regex)
例:
String reg =" +";//空格符出现一次或者多次
String reg=".";//此处的.代表任意一个字符
String reg="\\."//记住,如需要用到点,必须要双反斜杠转义
(.),用()把规则封装成组,以便重用
用()封装成组的规则都有编号,需要重用则\\n
例:(.)\\1+
“$1”指拿前一个规则的第一个组的规则
((()()())如果要找多少组,看左括号,有多少个左括号就有多少组。
3.替换:
str.replaceAll(regex,replacement) //将replacement替换掉str中符合regex规则的子串
4.获取:
将字符串中符合规则的子串取出
步骤:
①将正则表达式封装成对象
Pattern p=Pattern.compile(regex);
②让正则对象和要操作的字符串关联
Matcher m=p.matcher(str);
③关联后,获得正则表达式的匹配引擎
m.matches();//其实String类就将上述两对象完成分装,只不过分装后的功能单一
④通过引擎对符合规则的子串进行操作,比如取出
while(m.find()){ //将规则作用到字符串上,并进行符合规则子串的查找
m.group(); //获取匹配后的结果
}
例:纠正结巴
String str="我我我我我我.....我..我要..要..要要要学...学学....学....编...编程";
思路:
1.先将点去掉
2.将重复的内容去掉
关键代码如下:
str=str.replaceAll("\\.+","");
str=str.replaceAll("(.)\\1+","$1");//将任意字符出现一次或者多次替换成当前字符(.)和\\1+和$1都是指封装任意字符的这个规则组
例:IP地址的排序
String ip="192.164.2.1 102.2.234.2 10.10.10.10 2.2.2.2";
思路:
1,将IP地址每个地址段前补足两个0,然后取后3位,即有效位
2,分割IP地址,然后将IP地址直接放入TreeSet中排序
ip=ip.replaceAll(“(\\d+)”,“00$1”); //上来就先补0
ip=ip.repalceAll("0*(\\d{3})","$1");//取后面3个有效位
String[] arr=ip.split(" +");//按一个空格或多个空格分隔IP地址段
TreeSet ts=new TreeSet();//然后将IP地址段字符串扔里面去,当然,重复的话是放不进去的
最后,用replaceAll("0*(\\d+)","$1");恢复格式
一定要掌握:邮件地址进行校验
str.matches(reg);//str为邮箱字符串
String reg ="[a-zA-Z0-9_]+@[A-Za-z0-9]+([\\.a-zA-Z]+)+";//较为精确的匹配
网页爬虫(蜘蛛)
获取指定文档中的邮件地址,使用获取功能Pattern Matcher
关键代码如下:
URL url=new URL("http://......");
URLConnection conn=url.openConnection();
BufferedReader bufIn=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line=null;
//以下代码为重点理解的代码
String mailreg="\\w+@\\w+(\\.\\w+)+"
Pattern p=Pattern.compile(mailreg);
while((line=bufIn.readLine())!=null){
Matcher m=p.matcher(line);
while(m.find()){
System.out.println(m.group());
}
}
通过此次正则表达式的学习,知道了一些特殊符号的用法,主要查阅API,而且难点的还是在第一个例子QQ的校验,对Pattern和Matcher的用法
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员—正则表达式
- 黑马程序员———正则表达式
- 黑马程序员———正则表达式
- 黑马程序员———正则表达式
- 黑马程序员———正则表达式
- 黑马程序员——正则表达式
- 黑马程序员——正则表达式
- 黑马程序员——正则表达式
- 黑马程序员——正则表达式
- 黑马程序员Java——正则表达式
- rman 命令行,直接startup 起db
- bind1st,bind2nd,not1,not2
- BZOJ2456 Mode & zju2132 The Most Frequent Number
- 吉他泛音分析
- HDU-4394 Digital Square(DFS)
- 黑马程序员——正则表达式
- 如何高效的工作
- Python3伪装浏览器爬虫读取网页内容
- 理解PHP对象注入
- Android Nexus6 和iPhone6内置应用对比分析
- 欢迎使用CSDN-markdown编辑器
- 解决Ubuntu下无法启动Weka GUI
- 手动创建复杂格式的长微博
- leetcode N-Queens I & II N皇后问题