Regex Tutorial
这个非常好
有中文翻译,不过英文版本有更新
Literal 文本字符
meta-character 元字符、特殊字符
escape sequence: \meta-character
注意在一些使用了正则表达式的console命令中,'...'或/.../用于表示 search expression 的开始和结尾如
grep '^win'
它们并非元字符
字符:0-9,a-z,A-z,可以打印的符号,空格,Tab,断行(是否作为字符可以特殊的规定)
不可显示字符
\t Tab
\r 回车
\n 换行 (windows使用 \r\n,unix 使用 \n)
字符串 指正则表达式处理的整个内容,包含换行换页等等
元字符
元字符11个:[ ] \ ^ & . | ? * + ( )
它们作为文本字符,要加 escape \, 比如 1\+1=2
1. 任意字符
"." : 匹配一个任意字符,并且不能没有,且不匹配换行
2. 字符集以及字符集内部的范围和取反
- [] : []中的字符被匹配 once and only once
- - : 在 [] 中且在字符中间才是元字符,表示连续范围,[0-9] [0-9A-C];而 [-a-zA-Z] 第一个 - 不表示范围,而是表示符号 “-” dash
- ^ :取反 [^Ff] 除 f, F 外任一字符;^ 需紧跟 [
字符集中的元字符,只有4个有特殊含义,其他元字符都是文本字符。这4个字符是 ], \, ^, -
常用字符集的简写
\d 等价于 [0-9]
\D 等价于 [^\d]
\w 单词集 [A-Za-z0-9_]
\W [^\w]
\s space,包含空格,Tab, \r, \n
\S [^\s]
字符集的重复是重复整个字符集,而非某个字符,eg [\d]+,不仅匹配777,也匹配 789
3. 位置
^ (在[]以外) 表示 target string 的开始
$ 表示 target string 的结尾
4. 重复
?: 前面一个字符 0或1次,等价于 {0,1}
*: 前面一个字符 0或多次,>= 0
+: 前面一个字符 1或多次,>= 1
{n}: 前面一个字符 n 次
{n,m}: 前面一个字符 m >= 次数>= n
eg. [a-z]+ 匹配任意小写字母组合,abc, hkl, a
eg. ".+" 匹配任意字符,但不包含断行
5. 其他元字符
() 将表达式的小成分组合起来。注:()是有分组含义的,在python中这与group有关
| 逻辑或
eg ((4\.[0-3])|(2\.[0-3])) 匹配 4.0-4.3或2.0-2.3
+,?,*的贪婪性
正则导向的引擎是贪婪的,匹配的结果越长越好。eg This is a first<\em> text.
用 <.+>匹配,结果为 first<\em>
可以用懒惰性代替贪婪性
+ +?
* *?
? ??
eg abc 用 [a-c]?? 匹配得到4个结果,分别为 |a|b|c| 四个 | 的位置,匹配结果长度为 0
0 comments:
Post a Comment