Java学习笔记
正则表达式()
关键字 | 含义 |
---|
^ | 表示非的含义也就是不匹配 |
\s | 匹配任意的空白符(匹配一次) |
\S | 匹配非空白符(匹配一次) |
\W | 匹配任意不是字母,数字,下划线,汉字的字符(匹配一次) |
\w | 匹配任意字母,数字,下划线,汉字的字符(匹配一次) |
\d | 匹配数字(匹配一次) |
\D | 匹配非数字(匹配一次) |
\b | 单词的开始或者结束(匹配一次) |
. | 任意字符 |
{n} | 重复出现n次 |
{n,} | 出现一次或者多次 |
{n,m} | 重复n到m次 |
? | 0次或一次 |
[abc] | 表示只能是a或者b或者c(匹配一次) |
[a-z&&[sdf]] | 表示a-z和s,d,f的交集(匹配一次) |
\ | 转义字符(java中双引号有特殊含义) |
() | 表示分组 |
(?i) | 忽略大小写 |
test(?=1|2|3) | 表示匹配test1或者test2或者test3 但是打印输出只会输出test |
代码演示
public class demo {
public static void main(String[] args) {
String qq = "a2224201";
String regex = "[1-9]\\d{2,7}";
boolean result = qq.matches(regex);
System.out.println(result);
}
}
public class demo {
public static void main(String[] args) {
String qq = "52224201";
String regex = "[1-9]\\d{2,7}";
boolean result = qq.matches(regex);
System.out.println(result);
}
}
书写正则表达式是从左到右书写
//这个表达式的含义是任意的数字字母出现2到6次 (程序的结果是true)
String str="03ee30";
String regex = "[\\w&&[^_]]{2,6}";
demo(str, regex);
写一个用户名的正则表达式(大小写字母数字下划线一共4-16位)
String str="033_";
String regex = "\\w{4,16}";
demo(str, regex);
身份证月份正则表达式
0[1-9]|1[012]
爬虫的书写
public static void main(String[] args) {
String str="《人民日报》(电子版)的一切内12容(包括但不限于文字、图片、PDF、图表、标志、标识、商标、版面设计、专栏目录与名称、内容分类标准以及为读者提供的任何信息)仅供人民网读者阅读、学习研究使用,未经人民网股份有限公司及/或相关权利人书面授权,任何单位及个人不得将《人民日报》(电子版)所登载、发布的内容用于商业性目的,包括但不限于转载、复制、发行、制作光盘、数据库、触摸展示等行为方式,或将之在非本站所属的服务器上作镜像。否则,人民网股份有限公司将采取包括但不限于网上公示、向有关部门举报、诉讼等一切合法手段,追究侵权者的法律责任。";
Pattern p = Pattern.compile("\\d?");
Matcher matcher = p.matcher(str);
while (matcher.find()) {
String group = matcher.group();
System.out.print(group);
}
}
网络爬取
public static void main(String[] args) throws IOException {
URL url = new URL("http://idcard.ifanyi.com.cn/");
URLConnection cont = url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(cont.getInputStream()));
Pattern p = Pattern.compile("\\d{18}");
String line;
while ((line=bufferedReader.readLine())!=null){
Matcher matcher = p.matcher(line);
while (matcher.find()){
System.out.println(matcher.group());
}
}
}