1.写法
/表达式/g /\d/g
2. 元字符
. //匹配除换行符以外的任意字符
\w //匹配字母或数字或下划线或汉字
\s //匹配任意的空白符
\d //匹配数字
\b //匹配单词的开始或结束
^ //匹配字符串的开始
$ //匹配字符串的结束
3.字符转义
使用\
来取消这些字符的特殊意义
4. 重复
* //重复零次或更多次
+ //重复一次或更多次
? //重复零次或一次
{n} //重复n次
{n,} //重复n次或更多次
{n,m} //重复n到m次
5.字符组 [字符]
eg:[abcde] [0-9] [a-z] [A-Z] [?!]
等
6.或 |
eg:下面例子匹配 2-4 位数字或者 4-7 位数字\d{2,4}|\d{4,7}
7.非运算 ^
下面例子除了单词hello 以外都能匹配[^\bhello\b].*
8. 分组 ()
分组后就可以指定这个子表达式的重复次数了
eg:匹配22—444444
(\d{2,4})(-){3}(\d{6,9})
9.后向引用
用于重复搜索前面某个分组匹配的文本。
eg:下面例子可以匹配 hijffdhi
(hi).*\1
eg: hello darling hello(\bhello\b)(.*?)\1
10.零宽断言 (?=)
满足特定条件才能匹配
eg:下面例子可以捕获单词 hello(?=\bhello\b).{5}
11.负零宽断言 (?!)
与零宽断言相反
下面例子不匹配数字(?!\d).
12.贪婪与懒惰
贪婪:匹配尽可能多的字符
eg: a.*b 匹配以a开头以b结尾的尽可能多的字符串
懒惰:与贪婪相反匹配尽可能少的字符串
eg:a.+? 匹配以a开头的尽可能少的字符
*? //重复任意次,但尽可能少重复
+? //重复1次或更多次,但尽可能少重复
?? //重复0次或1次,但尽可能少重复
{n,m}? //重复n到m次,但尽可能少重复
{n,}? //重复n次以上,但尽可能少重复
13.语法总结
\a 报警字符(打印它的效果是电脑嘀一声)
\b 通常是单词分界位置,但如果在字符类里使用代表退格
\t 制表符,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$,但不受处理多行选项的影响)
\G 当前搜索的开头
\p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
(?>exp) 贪婪子表达式
(?<x>-<y>exp) 平衡组
(?im-nsx:exp) 在子表达式exp中改变处理选项
(?im-nsx) 为表达式后面的部分改变处理选项
(?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
(?(exp)yes) 同上,只是使用空表达式作为no
(?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
(?(name)yes) 同上,只是使用空表达式作为no
内容引荐于: 正则表达式30分钟入门教程.