正则表达式学习笔记
来源:互联网 发布:类似商务通的软件 编辑:程序博客网 时间:2024/06/05 06:18
0x1 元字符
像任何一门自然语言,正则表达式有他自己的元音字母——元字符,必须牢牢的记住每一个原字符的含义才能流畅看正则表达式。否则一遇到就查表是浪费时间且痛苦的。
常用的原字符:
. 点号。一个点号可以代表除了换行符以外的任何字符。
^ 匹配接受匹配的字符串的开始。只匹配一个位置
$ 匹配接受匹配的字符串的结束。只匹配一个位置
\b boundary 它可以匹配 单词的边界。可以是单词开头或者结尾,单词往往使用空格和标点符号作为分界,但是\b只匹配一个位置,不匹配字符。
\d digit 匹配一个数字。
\w word 匹配字母数字下划线,汉字。
\s split 匹配空格,tab,换行符,全角的空格等等。
如果需要匹配元字符本身,那么在写表达式的时候必须在元字符前加上\反斜杠。告诉程序取消原字符的特殊意义。
0x2 重复
如果要匹配一连串同类型的数据,可以使用重复语法来写正则表达式。
* 星号。 一个星号代表重复前边的内容任意次。
+ 加号。 加号和星号类似,但是重复次数是1到无穷大。
? 问号。重复一次或者零次。
{n} 花括号,重复n次。
{n,} 重复n次以上。
{n,m} 重复n,到m次
0x3 自定义集合
如果,一个位置只需要在少部分字符中进行选择的话。我们可以自定义一个集合进行匹配。我们使用方括号来列出集合元素。扩号中有些原字符就变意思了,比如^。
[] 代表是一个小集合
[0-9] 匹配数字
[a-zA-Z] 匹配字母
0x4 分支条件
如果我们需要在一个表达式中写多个规则,那么可以使用到分支条件 | 来分开规则|
| 管道符号,代表前面和后面分别是不同的规则,当不满足前面的规则时,继续匹配。
所以能匹配较多的规则应该放在前面,否则容易出错。
0x5 分组(子表达式)
如果需要重复多个字符,我们需要在总表达式中写子表达式。这时候我们使用()小括号来分组。
() 小括号,可以把正则表达式当成一组来使用。用法比较多。
0x6 反义
比较简单,就是反义元字符。
\W 匹配任意不是字符数字下划线,汉字的字符。
\S 匹配任意不是空白字符的字符(分割字符)
\D 匹配任意非数字的字符。
\B 匹配不是单词开头或者结尾的字符。
[^x] 匹配除了x的以外的任意字符。
[^aeiou] 匹配除了aeiou以外的字符。
0x7 后向引用
使用小括号指定一个子表达式,匹配这个表达式的文本可以在表达式或者其他程序中做进一部处理。默认情况,分组从左到右分配组号,1,2,3................
注意:分组0对应整个表达式;分配过程有两次,第一遍给未命名的组分配,第二次给命名组分配,所以命名组组号大雨未命名组;(?:exp) 该组不分配组号。exp指表达式。后向引用可以重复搜索前面分组匹配到的单词。反斜杠后面跟组号 ,\1,就能引用。
也可以指定组名。语法为(?<word>exp),或者(?‘word’exp)这样组名就指定为word。引用的话就可以使用\k<word>。
(exp) 匹配exp,自动命名
(?<word>exp),(?'word'exp) 匹配exp,组名word
(?:exp) 匹配exp,不捕获文本。
0x8 零宽断言
第一次看到这个名字,就醉了。什么鬼啊。先看看有哪些鬼。
(?=exp) 匹配exp前面的位置,以exp结尾不带exp的部分
(?<=exp) 匹配exp后面的位置,以exp开头不带exp的部分
(?!exp) 匹配后面跟的不是exp的位置,后面不是exp得都行
(?<!exp) 匹配前面不是exp的位置。前面不是exp的都行。
太反人类了,以后用到在研究。
0x9 注释
(?#这个就是注释,我就不多写了)
0x10 贪婪和懒惰
这小结比较重要。因为常用。默认情况下匹配重复的时候正则表达式会尽可能匹配最多个字符。这就是贪婪。
那么懒惰就是在重复符后面加个?问号
*? 重复任意次尽可能少
+? 重复一到任意次尽可能少
?? ~~~~~~脑补~~~~~~~~
{n,m}? ~~~~~~脑补~~~~~~
{n,}? ~~~~~~脑布~~~~~~
0x11 处理选项
Ignorecase 忽略大小写
Multiline 多行,改变&和^的意思
Singleline 单行,更改.的意思,使它和每一个字符匹配
IgnorePatternWhitespace 忽略表达式中的非转义空白并启用#标记的注释,看不懂
ExplicitCapture 仅捕获已经被显示命名的组。
0x12 未讲到的东西
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 学习正则表达式笔记
- 正则表达式学习笔记
- 学习正则表达式笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 解决Cocos2d点击电源键后游戏纹理失效
- js/jquery(2)
- Maven与jetty问题集锦
- HTML5下DOM元素在窗口中拖动(更改位置)
- Java杨辉三角的打印
- 正则表达式学习笔记
- Android的OnTouch事件的处理机制
- GTest使用
- js浅copy和深copy
- 完成用户列表Demo,使用plist当数据源,在TableView中显示plist的内容
- 微信营销最重要的环节大部分人都忽略了
- 食物链
- Android 5.0 源码分析 Handler Looper MessageQueue 底层原理
- Django1.9学习笔记