正则表达式

介绍

一般用于文本的复杂处理,通过定义的规则可以匹配一类的字符串。学习它实际就是学它的语法规则。
优势与用途
一种强大而灵活的文本处理工具
大部分编程语言/数据库/文本编辑器/开发环境都支持正则

语法

普通字符

字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是“普通字符”。在匹配一个字符串的时候,匹配与之相同的一个字符。

转义字符

\n                  换行
\t                  制表符
\\                  \ 本身
\^,\$,\(,\),\{,\},\?,\+,\*,\|,\[,\]  这些字符本身

标准字符集合

\d   任意一个数字
\w   任意一个字母或数字或下划线
\s   包括空格/制表符/换行符等空白字符的其中任意一个
.    小数点可以匹配任意一个字符(除了换行符)

注意大小写,大写是相反的意思
image
image

自定义字符集合

使用 [] 匹配方式,能够匹配方括号中任意一个字符

[ab5@]      匹配a 或 b 或 5 或@
[^abc]     匹配a,b,c以外的字符
[f-k]       匹配f到k之间任意一个字符
[^A-F0-3]   匹配A-F,0-3之外的任意一个字符

image
image
image

量词

{n}     表达式重复n次
{m,n}   表达式至少重复m次,最多重复n次
{m,}    表达式至少重复m次
?     表达式0或者1次
+       表达式至少出现一次
*       表达式出现任意次(包括0)

image
image
image
匹配次数中贪婪模式(默认)
匹配次数中非贪婪模式 修饰匹配次数的特殊符号后再加上“?”号
image

字符边界

匹配的不是字符而是位置,符合某种条件的位置

^   与字符串开始的地方匹配
$   与字符串结束的地方匹配
\b  匹配一个单词边界

\b:前面的字符和后面的字符不全是\w
image
image
注意:整个文本看作一个字符串,都有开头和结尾
如果只匹配开始和结束,可以使用 \A和\Z

选择符和分组

|               左右两边表达式或的关系
()              被修饰匹配次数,内部表达式作为整体
去匹配结果时,内部表达式匹配的内容可以单独拿到
每对括号分配一个编号,顺序从1开始自动编号(以左括号为主)
(?:Expression)  用非捕获组来抵消使用()的副作用

反向引用(\nnn)
通过反向引用,可以对分组已捕获的字符串进行引用
image
image

预搜索

  • 只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度

  • 这个位置应该符合某个条件。判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符。是对位置的匹配

  • 正则表达式的匹配过程中,如果子表达式匹配的是字符内容,而非位置,并被保存到最终的匹配结果中,那么就认为这个子表达式是零宽度的,占有字符还是零宽度,是针对匹配内容是否保存到最终匹配结果中而言的

    (?=+exp) 断言自身出现的位置的前后能匹配表达式exp
    (?<=exp) 断言自身出现的位置的前面能匹配表达式exp
    (?!exp) 断言此位置的后面不能匹配表达式exp
    (?<!exp) 断言此位置的前面不能匹配表达式exp
    image
    常用的正则表达式
    image

使用

环境使用

node++、Esclipse等工具中,在搜索工具中可以选择正则搜索,然后填写正则表达式

编程语言使用

java

相关类位于 java.util.regex包下面

类 Pattern

  • 正则表达式的编译表示形式
  • Pattern p= Pattern.compile(r,int) //建立正则表达式,并启用相应模式

类 Matcher

  • 通过解释Pattern对字符串执行匹配操作的引擎

  • Matcher m = p.matcher(str); //匹配str(字符串)

    Pattern p= Pattern.compile("\w+") \java中\要转义一下
    Matcher m = p.matcher(“dsfsdf15&&dfds”);
    m.matches(); //将整个字符串序列与该模式匹配
    m.find() //扫描输入序列,查找下一个与该模式匹配的子序列
    m.group() //扫描输入序列,获取下一个与该模式匹配的子序列
    注意:在Java中split()中也可以使用正则

爬虫使用案例
image
image
image

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值