[19/05/04-星期六] 正则表示式(Regular Expression)
一、概念



语法:


\D :就是不是0-9数字的其它字符;
\W:与\w相反;


a\d?b:表示在字符a和b之间可以有一个数字或者没有数字都可以;如:ab 、a3b
a\d+b:表示在字符a和b之间至少有一个数字,如:a3b 、a34b,
a\d*b:表示在字符a和b之间至少有0个数字或者多次(不仅限于1次),如:ab、a3b 、a34b,

^i :假如有很多i,只有字符串开头的i符合条件(默认的是整个文本都是一个字符串,不管你是否换行,整个文本只有一个开头)。
i$:匹配结尾的i
\b:用love\b去匹配love9love love结果是后边2个love符合条件。\b找到是个位置,第一个当光标在第一个love后边,光标的前边是e后边是9都属于\w的范围,
所以不符合。但是第2个love,光标前边e后边是空格,空格不属于\w的范围,符合要求。第3个同理。\w:字母数字下划线。


例如:lo goto goto gogo toto dododo
([a-z]{2})\1:匹配到gogo toto dodo 加了括号表示一个捕获组,因为只有一个括号\1表示即可。系统把2个字母保存一下,只有再次重复一下才表示匹配成功

[a-z]+ 表示匹配一个小写字母或者无限个小写字母,或者说匹配一个单词,这个单词至少一个字母,没有字母它也不是单词。
[a-z]+(?=ing) 匹配一个ing结尾的单词,但是ing不计入匹配结果,在匹配中ing不高亮显示。
[a-z]+(?<!\d) 匹配非数字结尾单词
[a-z]+(?<=ing) 匹配一个ing结尾的单词,ing计入匹配结果,在匹配中ing高亮显示。

解:(0\d{2,3}-\d{7,9})|(1[35789]\d{9})

解:"^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$"
[\w\-]+@[a-z0-9A-Z]+(\.[A-Za-z]{2,4}){1,2}



【Java代码】
/**
*
*/
package expression; import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Demo01 {
public static void main(String[] args) {
//字符串shdjkj890 是否符合正则表达式\w+
Pattern pattern=Pattern.compile("\\w+");//表达式对象,Java中在正则前加个\一个斜杠变两杠
Matcher matcher=pattern.matcher("shdjkj890&ik90*7k");//要匹配的目标对象
//matches()是将整个字符串序列与正则表达式匹配.find() 扫描输入的字符序列,查找与该模式匹配的下一个值序列
//System.out.println(matcher.matches());//matcher.matches();返回一个Boolean变量,返回true。 /*System.out.println(matcher.find());//它的输出结果受到matches()的影响。matches()已经匹配过,指针已经移动了
System.out.println(matcher.group());//返回第一个符合条件的
System.out.println(matcher.find());
System.out.println(matcher.group());//返回第二个符合条件的 ,以此类推*/ /*while (matcher.find()) {//等价于上边的
System.out.println(matcher.group());//group()和group(0)匹配整个表达式的子字符串
}*/ Pattern pattern2=Pattern.compile("([a-z]+)([0-9]+)");
Matcher matcher2=pattern2.matcher("aa232&ik90*7k56");
while (matcher2.find()) {
System.out.println(matcher2.group());//同时符合1组和2组的要求
System.out.println(matcher2.group(1));//第1组([a-z]+) 单词
System.out.println(matcher2.group(2));//第2组([0-9]+) 数字
} //替换操作,把数字换成#,matcher3.replaceAll("#")
Pattern pattern3=Pattern.compile("[0-9]");
Matcher matcher3=pattern3.matcher("aa232&ik90*7k56");
System.out.println(matcher3.replaceAll("#")); //分割操作,以数字作为边界切割字符
String str="d5678ghh678gh56";
String arr[]=str.split("\\d+");
System.out.println(Arrays.toString(arr));
}
}
【爬虫模拟】
/***
* 用正则表达式 去做网络爬虫
*/
package expression; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Demo02 { //获得网页源码的方法
public static String getURLContent(String urlStr,String charset) throws Exception {
StringBuilder sb=new StringBuilder();
URL url=new URL(urlStr);
BufferedReader reader=new BufferedReader(new InputStreamReader(url.openStream(),Charset.forName(charset) ));
String temp="";
while ((temp=reader.readLine())!=null) {
sb.append(temp);
}
return sb.toString();
} public static void main(String[] args) throws Exception {
String destString=getURLContent("https://www.163.com/","GBK"); //Pattern p=Pattern.compile("<a[\\s\\S]+?</a>");
Pattern p2=Pattern.compile("href=\"([\\w\\s./:]+?)\"");
Matcher m=p2.matcher(destString);
while (m.find()) {
System.out.println(m.group(1)); }
}
}
[19/05/04-星期六] 正则表示式(Regular Expression)的更多相关文章
- python(4): regular expression正则表达式/re库/爬虫基础
python 获取网络数据也很方便 抓取 requests 第三方库适合做中小型网络爬虫的开发, 大型的爬虫需要用到 scrapy 框架 解析 BeautifulSoup 库, re 模块 (一) r ...
- Python正则表达式Regular Expression基本用法
资料来源:http://blog.csdn.net/whycadi/article/details/2011046 直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表 ...
- Python 模块 re (Regular Expression)
使用 Python 模块 re 实现解析小工具 概要 在开发过程中发现,Python 模块 re(Regular Expression)是一个很有价值并且非常强大的文本解析工具,因而想要分享一下此 ...
- python learning Regular Expression.py
# 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符合某个模式(规 ...
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- Python -- 正则表达式 regular expression
正则表达式(regular expression) 根据其英文翻译,re模块 作用:用来匹配字符串. 在Python中,正则表达式是特殊的字符序列,检查一个字符串是否与某种模式匹配. 设计思想:用一 ...
- grep(Global Regular Expression Print)
.grep -iwr --color 'hellp' /home/weblogic/demo 或者 grep -iw --color 'hellp' /home/weblogic/demo/* (-i ...
- Does FTK index search support regular expression?
Some of my friends ask me a question: "Does FTK index search support regular expression?" ...
- Microsoft Word Regular Expression
Microsoft Word Regular Expression Word裏的正則表達式-不一樣的符號. 一.Normal Find and Replace 二.Search by using wi ...
随机推荐
- sshfs 挂载远程文件夹
1 安装 # yum install sshfs # dnf + releases] $ sudo apt-get install sshfs [On Debian/Ubuntu based syst ...
- 双层for循环用java中的stream流来实现
//双重for循环for (int i = 0; i < fusRecomConfigDOList.size(); i++) { for (int j = 0; j < fusRecomC ...
- 8.docker的系统资源限制
一. 概述 默认docker容器使用的memory资源和CPU资源是没有限制的,但是我们可以在docker run的时候通过选项去限制,具体参考官方文档. [root@node1 ~]# docker ...
- expect实现远程主机自动执行命令脚本
2014年第一个脚本,哈哈!!! expect实现远程主机自动执行命令脚本: #!/usr/bin/expect -- if { [llength $argv] < 4 } { puts &qu ...
- Arduino通讯串口
串口是Arduino与其它设备进行通信的接口 所有的Arduino控制板有至少一个串口(又称作为UART或USART).它通过0(RX)和1(TX)数字引脚经过串口转换芯片连接计算机USB端口与计算机 ...
- Java语言Lang包下常用的工具类介绍_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都 ...
- MySQL数据库4Python操作mysql、索引、慢查询日志
目录 一.Python 操作 mysql 1.1python 操作 mysql 1.2查询数据 1.3增加(添加.更新)数据 1.4修改数据 1.5删除数据 1.6SQL注入问题 1.6.1问题的引入 ...
- js 将时间戳转为日期格式
最近项目需要在前端将一个13位的时间戳显示成日期格式,在网上查了很多都不符合要求,只有一个是能满足要求的,在这记录一下,说不定以后还用的着. 13位时间戳改为yyyy-MM-dd HH-mm-ss 格 ...
- adaboost面试题
1.简述权值更新方法 (1)初始化权值分布: (2)找到误差最小的弱分类器: (3)计算弱分类器的权值: (4)更新下一轮样本的权值分布: (5)集合多个弱分类器成一个最终的强分类器. 2.为什么能快 ...
- [spring cloud feign] [bug] 使用对象传输get请求参数
前言 最近在研究 srping cloud feign ,遇到了一个问题,就是当 get 请求 的参数使用对象接收时,就会进入熔断返回.经过百度,发现网上大部分的解决方案都是将请求参数封装到Reque ...