@wuzhimang
2016-04-10T16:11:31.000000Z
字数 1202
阅读 1474
正则表达式
笔记
RE
元字符:在RE中有特殊含义的字符。
.
[\b] \f \n \r \t \v
等 --> 回车换行(\r\n
)[]
元字符大写和小写一般表示相反的匹配
在字符集合中,一般的,像.
+
这样的元字符会被解释为普通字符,不需要被转义,但转义也可以。即[\w.]
等同于[\w\.]
。
匹配的重复次数
*
,?
,+
--> 分别匹配字符(或字符集)零个一个或多个,零个或一个,一个或多个{1,8}
, {3,}
,{3}
过度匹配 (实际中注意使用"懒惰型"的)
贪婪型元字符 | 懒惰型元字符 |
---|---|
* |
*? |
+ |
+? |
{3,} |
{3,}? |
位置匹配
\b
匹配单词边界,匹配一个位置,即一个\w
和\W
之间的位置(字母、数字、下划线), 如 \bhello\b
。
注:些支持
\<
\>
这些分别匹配单词的开头和结尾
^
$
字符串匹配
分行匹配模式(multiline mode)-->将行分隔符当作一个字符串分隔符对待-->(?m)
必须出现在模式最前面
注:有很多RE不支持这个
子表达式
将子表达是当作一个独立元素使用
|
RE里面的或操作符,如 ( ){2,}
, (19|20)\d{2}
注:
 
标识HTML文档中使用的非换行型空格,即non-breaking space
可嵌套使用
回溯引用(backreference)
查找连续重复出现的单词 [ ]+(\w+)[ ]+\1
注:回溯引用匹配通常是从1开始,
\0
表示匹配整个正则表达式;有的RE使用$
或者支持名字捕获(named capture)
常用在替换操作中,或将文本分为多个子表,进行排版优化
用来进行大小写转换的元字符,如\E
\l
\L
\u
\U
\l \u
只能把下一个字符或子表达是转换为小大写,\L \U
则和\E
一起使用,作用于中间的字符
前后查找
?=
或 ?<=
必须放在子表达式开头,其中向前查找的长度可变,向后查找只能是固定的模式 <-- 几乎所有的RE都遵守这一规则(?=)
(?!)
(?<=)
(?<!)
,其中!
标识负向查找 negative,如负向前查找。(?<=<[tT]>).*(?=\</[tT]>)
条件嵌入
用?
匹配一个字符或表达式,如果它存在则执行后面的
回溯引用条件,语法 (?(backreference)true-regex)
,在backreference存在时,true-regex才被执行
注:
?(1)
是可以的,这里不用反义,但?(\1)
往往也是可以的。
前后查找,只有在一个向前或向后查找取得成功的情况下才才允许一个表达式被使用。将回溯引用条件中的编号-->一个完整的前后查找表达式
如:
\d{5}(?(?=-)\d{4})
-->?(?=-)
仅起到一个判断的作用,不消费