第100遍学习正则表达式

()##正则表达式
相信看到这个题目的时候,你已经对正则表达式已经学习了不下十遍了,题目可能有点夸张,但是正则确实也是很难学懂的一门工具语言,其实它也只是为了让机器读懂而已,每次学习完之后总是忘记了,很久没用看到之后总是一脸懵逼,然后重新查询手册,现在,把我重新学习正则表达式的过程记录一下,希望能够更好地运用这门工具语言。

用途

1.之前写爬虫的时候也是经常用于网页文本的匹配,处理文本
2.过滤敏感字符
3.处理字符串

开始学习

网上突然发现有人写了《learn regex the easy way 》,看完之后感觉涨姿势了,现整理如下,如果你有兴趣阅读,请看这里,同时配合练习网站食用,效果最佳。
相信各位老司机应该看了很多遍正则的文档了吧,基础部分就直接省略。

1.元字符

正则表达式主要依赖元字符,元字符不代表他们本身的字面意思, 他们都有特殊的含义.
元字符我觉得大体可以分为三类

1. 表示特殊含义的字符

元字符描述
.句号匹配任意单个字符除了换行符.
[ ]字符种类. 匹配方括号内的任意字符.
[^ ]否定的字符种类. 匹配除了方括号里的任意字符
(xyz)字符集, 匹配与 xyz 完全相等的字符串.
\转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \
\w匹配所有字母数字, 等同于 [a-zA-Z0-9_]
\W匹配所有非字母数字, 即符号, 等同于: [^\w]
\d匹配数字: [0-9]
\D匹配非数字: [^\d]
\s匹配所有空格字符, 等同于: [\t\n\f\r\p{Z}]
\S匹配所有非空格字符: [^\s]
\f匹配一个换页符
\n匹配一个换行符
\r匹配一个回车符
\t匹配一个制表符
\v匹配一个垂直制表符

2. 表示重复次数的字符

元字符描述
*匹配>=0个重复的在*号之前的字符.
+标记?之前的字符为可选.0或1次
?否定的字符种类. 匹配除了方括号里的任意字符
{n,m}匹配num个中括号之前的字符 (n <= num <= m).

3. 锚点

元字符描述
^用来检查匹配的字符串是否在所匹配字符串的开头.
$$ 号用来匹配字符是否是最后一个.

2.匹配规则

1. 后向引用

用于重复搜索前面某个分组匹配的文本。

  • 比如:
    \b(\w+)\b\s+\1\b,可以匹配重复的单词如,go go其中\b表示匹配单词的开始或者结束,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。

  • 自己指定子表达式的组名: (?< Word >\w+) ,使用自定义分组的时候,使用以下语法 \k < Word>上面例子可以改写为\b(?< Word>\w+)\b\s+\k< Word>\b

2. 零断宽言

第一次听到这个专业术语的时候,一脸懵逼,都不太想看是什么东西了,主要是太晦涩难懂了,查阅其他资料之后,我们可以把它叫做前后关联约束(前后预查)

  • 前置约束
    (?=exp),匹配exp正则表达式前面的位置
    (?!exp),匹配后面跟的不是exp的位置
  • 后置约束
    (?<=exp),匹配exp后面的位置
    (?< !exp),匹配前面不是exp的位置
3. 贪婪与懒惰匹配

上述的重复次数都为贪婪匹配,即通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符,有时为了性能需求,需要匹配尽可能少的字符,很简单的做法就是前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?

以上,具体以官方手册为准!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值