9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)


前言

没错,Java也是可以进行爬虫的,正则表达式所有语言都是通用的。

一、正则表达式

正则表达式基本语法没什么好说的,下面给出几个学习网站
正则表达式语法
正则表达式备忘清单,在线练习
正则表达式在线工具

正则表达式博客这篇博客我看访问量很大

下面我们只给出一下最基本的,最好能记住的

1 [ ] 语法

(1)[ABC] 和 [^ABC]

  • [ABC]:匹配 […] 中的所有字符
    例如 [aeiou] 匹配字符串 “google runoob taobao” 中所有的 e o u a 字母。
    在这里插入图片描述
  • [^ABC] : 匹配除了 […] 中字符的所有字符
    例如 [^aeiou] 匹配字符串 “google runoob taobao” 中除了 e o u a 字母的所有字符。例如 [^aeiou] 匹配字符串 “google runoob taobao” 中除了 e o u a 字母的所有字符。
    在这里插入图片描述

(2)[A-Z]和[a-zA-Z]

  • [A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。
    在这里插入图片描述
  • 推广[a-zA-Z] 表示 ,匹配所有大写字母和小写字母
    例如[a-zA-Z0-9_-] 表示字符集,包含小写字母、大写字母、数字、下划线和连接字符 -

小总结

可以看到上述(1)(2)是可以结合在一起灵活应用的

2 特殊字符语法(\w 这些)

  • (1) . 点 :匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]。
    在这里插入图片描述

  • (2)\w :匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
    在这里插入图片描述

  • (3)\W : 匹配除字母、数字和下划线之外的任意字符。等价于[^\w]

  • (4)\d :匹配任意一个阿拉伯数字(0 到 9)。等价于 [0-9]
    在这里插入图片描述

  • (5)\D : 匹配除数字外的任意字符。等价于[^0-9]

  • (6)\s : 匹配所有空白符(包括换行符)。等价于[\n\t\r\f\x0B]

  • (7)\S:匹配所有非空白符(不包括换行符)。等价于[^\s]

  • (8)[\s\S] : 结合起来就是匹配所有

3 数量符

  • (1)+ :匹配前面的子表达(如果用()括起来就是括号内部,没有就是+前一个字符)式一次或多次。
    例如,zo+ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
  • (2)* :匹配前面的子表达式零次或多次。
    例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于 {0,}。
  • (3)? :匹配前面的子表达式零次或一次。
    例如,do(es)? 可以匹配 “do” 、 “does”、 “doxy” 中的 “do” 和 “does”。? 等价于 {0,1}。
  • (4){n} :n 是一个非负整数。匹配确定的 n 次。
    例如,o{2} 不能匹配 “Bob” 中的 o,但是能匹配 “food” 中的两个 o。
  • (5){n,} :n 是一个非负整数。至少匹配n 次。
    例如,o{2,} 不能匹配 “Bob” 中的 o,但能匹配 “foooood” 中的所有 o。o{1,} 等价于 o+。o{0,} 则等价于 o*。
  • (6){n,m} :m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。
    例如,o{1,3} 将匹配 “fooooood” 中的前三个 o。o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。

4 \ 、()、 |

  • (1)\ :转义符
    例如,前面说过 **.**匹配所有字母、数字和下划线,如果我只是想单纯的点呢? 那就 \.
  • (2)(): 圆括号 () 用于创建子表达式,具有高于其他运算符的优先级。
    示例:(abc)+ 匹配 “abc” 一次或多次。
  • (3)| :管道符号 | 表示"或"关系,用于在多个模式之间选择一个。
    示例:cat|dog 匹配 “cat” 或 “dog”。

5 锚点 ^ 和 $,\b,\B

  • ^ : 匹配输入字符串的开始位置,匹配字符串或行的开头。
    示例:在这里插入图片描述
  • $ : 匹配字符串或行的末尾。
    示例:在这里插入图片描述
  • \b :单词边界,匹配单词的开头或末尾。
    示例:在这里插入图片描述
  • \B: 非单词边界,匹配不在单词开头或末尾的位置。
    示例:在这里插入图片描述

6 (?i) : 忽略其后面的大小写 ---- 这个Java是可以的,其他语言我不知道(正则表达式虽然大多通用,但也有部分是各语言独有的)

这个有灵活应用,注意看下面演示,下面都以 abc 为例子给出

  • (?i)abc : 表示忽略后面所有字符的大小写匹配 ,例如,可以匹配 ABC aBC abC abc等
  • a(?i)bc:表示忽略bc的大小写匹配,例如,aBC,aBc,abc,abC
  • a((?i)b)c: 表示只忽略b的大小写,例如,aBc,abc

7 一个完美匹配各种邮箱的应用

掌握了上面哪些,基本就够用了,下面是一个完美匹配邮箱的正则表达式
在这里插入图片描述

二、Java String里面的正则表达式练习

1 public boolean matches(String regex) : 判断此字符串是否与给定的 正则表达式 匹配。

  • String regex : 正则表达式

注意:Java中的" "经常会将 \ 识别失败,python中是在 r“ ” 这样解决这个问题,但Java不能这么解决,Java只能采用 \ 替换 \ (通常路径中我们就是要这么处理), 因此我们在正则表达式中也要用 \ 来替换 \,简单来说Java中 \ = \

String s = "abc";
System.out.println(s.matches("[a-z]*"));    // true
System.out.println(s.matches("a"));         // false

String s2 = "a\\j";
System.out.println(s2.matches("a\\\\j"));   // true   两条\\ 才能匹配到一个\
System.out.println(s2.matches("[ab]"));     // false

System.out.println("3".matches("\\d"));     // true

下面就给出大量演示帮助进一步理解上面的正则表达式语法

// [] 只能匹配一位字符
System.out.println("----------1---------------");
System.out.println("a".matches("[abc]"));    // true
System.out.println("z".matches("[abc]"));    // false
System.out.println("ab".matches("[abc]"));     // false
System.out.println("ab".matches("[abc][abc]"));    // true

// 不能出现 a b c
System.out.println("----------2---------------");
System.out.println("a".matches("[^abc]"));    // false
System.out.println("z".matches("[^abc]"));    // true
System.out.println("zz".matches("[^abc]"));     // false
System.out.println("zz".matches("[^abc][^abc]"));    // true

// a到z A到Z 0到9
System.out.println("----------3---------------");
System.out.println("a".matches("[a-zA-Z]"));    // true
System.out.println("z".matches("[a-zA-Z]"));    // true
System.out.println("aa".matches("[a-zA-Z]"));     // false
System.out.println("aa".matches("[a-zA-Z][a-zA-Z]"));    // true
System.out.println("A".matches("[a-zA-Z]"));    // true

System.out.println("e".matches("[a-dm-p]"));    // false
System.out.println("b".matches("[a-dm-p]"));    // true
System.out
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值