正则表达式学习笔记
来源:互联网 发布:java字符串转整型 编辑:程序博客网 时间:2024/05/22 10:55
参考:正则表达30分钟入门教程
http://www.cnblogs.com/netshuai/archive/2007/09/20/900032.html
* 重复0次或多次
+ 重复1次或多次
? 重复0次或1次
{m} 重复m次
{m,} 重复m次或更多次
{m,n} 重复m次到n次
. 匹配换行符外的任意一个字符
\w 匹配一个字母或数字或下划线或汉字
\s 匹配任意一个空白字符
\d 匹配一个数字
\b 匹配一个单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
[abcde] 匹配abcde中的一个字符
[^abcde] 匹配非abcde中的一个字符
[a-z0-9A-Z] 匹配a-z,0-9,A-Z中的一个字符
| 或; 分支条件
() 分组
\ 转义字符
分支条件
使用‘|’来标明分支,分支条件的顺序是从左到右
eg.
0\d{2}-\d{8}|0\d{3}-\d{7} 匹配两种电话号010-12345678和0375-1234567
分组
用()括起来的就是一个分组,是一个子表达式
eg.
(\d{1,3}\.){3}\d{1,3}表式一个IP地址,不过256.300.888.999这样的非法地址也在匹配之列
每个分组自动有一个组号,从左至右,以左括号为标志,组号从1开始累加
向后引用用于重复前匹配的文本,用\组号来引用,eg.
\b(\w+)\b\s+\1\b来匹配如go go这样的重复单词
常用分组语法
(exp) 匹配exp,并捕获内容到自动命名的组里,引用方式\组号
(?<name>exp) 匹配exp,并捕获内容到名为name的组里,引用方式\k<name>
(?:exp) 匹配exp,不捕获也不分配组号
(?=exp) 匹配exp前面的位置,eg. \bw+(?=ing\b)匹配以ing结尾的单词的前面部分,如reading的read
(?<=exp) 匹配exp后面的位置,eg. (?<=\bre)\w+\b匹配以re开头的单词的后面部分,如reading的ading
(?!exp) 匹配后面不是exp的位置,eg. \d{3}(?!\d)匹配三个数字,这三个数字后面不能是数字
(?<!exp) 匹配前不是exp的位置,eg. (?<![a-z])\d{7}匹配7个数字,前面不能是小写字母
(?#comment) 注释,comment中可以包括换行符等
贪婪与懒惰
默认情况下正则会尽可能多的匹配,如用a.*b来搜索aabab,会匹配aabab而不是aab
懒惰是尽可能的少匹配,如果需要懒惰匹配,则只需要在表重复的元字符后加?
懒惰限定符语法:
*? 重复任意次,但尽可能地少重复
+? 重复1次或多次,但尽可能地少重复
?? 重复0次或1次,但尽可能地少重复
{m,n}? 重复m次到n次,但尽可能地少重复
{n,}? 重复n次或更多闪,但尽可能地少重复
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 学习正则表达式笔记
- 正则表达式学习笔记
- 学习正则表达式笔记
- 正则表达式学习笔记
- 正则表达式学习笔记
- 编译错误提示PATH_MAX未声明
- 分别标记区段的 飞鸽传书 左、右端
- C# ThreadPool.QueueUserWorkItem典型案例详解
- Number()、parseInt()和parseFloat()数值转换 【转】
- DataReader调用
- 正则表达式学习笔记
- oracle参数open_cursors和session_cached_cursor详解!
- 兼容IE,FireFox,Chrome主流的文字阴影功能。
- 在Ubuntun下Windows分区无法编译android
- Thread
- C# ThreadPool
- Linux学习内核移植相关笔记第4部分
- 飞鸽传书系统上开发是一件多么惬意的事情
- 高效引用传值的方案