Skip to content

正则表达式入门教程

测试工具

正则表达式测试器

Cheat Sheet

符号 作用 举例
元字符
. 匹配除了换行符(\n)以外的任意字符 abc
\w 匹配数字字母下划线或汉字 abc123_!@#$%^&*()汉字+
\s 匹配任意空白符(" ") 123 456
\d 匹配数字 123abc
\b 匹配单词的开始或结束位置 \bhi hello high
ing\b sing bingo ings
^ 匹配字符串开始或行首
$ 匹配字符串的结束
\ 转义字符,用于把元字符转义,例如\. \* \\
重复
* 重复0到或多次 \w*
+ 重复1到多次 \b+
? 重复0或1次 \s?
{n} 重复n次,不多不少 \d{11}
{n,} 重复n到多次 \d{16,}
{n,m} 重复n到m次 [abc]{2,5}
字符类
[] 匹配括号中的任何一位 [aeiou] abcdefghi
[0-9a-zA-Z?()\[\]] abcdefjg!@#$%^&()_+
分枝条件
| 分枝条件, 注意严苛的条件在前,宽泛的条件在后 0\d{2}-\d{8}\b|0\d{3}-\d{7}\b 029-88337766 0917-3431110
反义
\W 匹配非字母数字下划线汉字的字符,例如符号括号空格 ac*()[]_+|
\S 匹配不是空白符的字符
\D 匹配非数字的字符
\B 匹配不是以字符开头或结束的位置 \Bhi hello high chi
[^] 匹配除了括号内字符以外的字符 [^abc] abcdef
分组
() 括号扩起来的部分为一个子表达式,或叫做分组,括号内的部分作为一个整体 (\d{1,3}\.){3}\d{1,3} 123.22.45.1
(?<name>) 把分组命名为name,可以在结果集里通过名字来访问匹配结果 (?<qq>\d{5}) 我的qq号是12345,厉害吧
后向引用
\1 或 \<name> 通过索引或名字引用前面匹配到的内容 \b(\w+)\b\s+\1\b
\b(?<word>\w+)\b\s+\<word>\b
go go go
零宽断言
(?=) 匹配表达式前面的内容,但不包括表达式匹配的内容 \w+(?=\s\d{5}) aa 12345 bb
(?<=) 匹配表达式后面的内容,但不包含表达式匹配的内容 JS不支持 (?<=\d{5}\s)\w+
(?!xxx) 零宽负向先行断言,匹配某位置后不包含xxx的字符串,可以连用(?!xxx)(?!bbb)表示既不包含xxx 也不包含 bbb, 比如 aa\\(?!xxx)(?!bbb)[^\\]*\\cc aa\asdf\cc
(? 零宽负向回顾后发断言,匹配某位置前不包含xxx的字符串 (?
贪婪与懒惰匹配
默认为贪婪匹配,尽可能多匹配 [a-z]* abcde
在重复次数后加一个?表示懒惰匹配,尽量少匹配 [a-z]*? abcde
*? 匹配任意次,尽可能少匹配 [a-z]*? abcde
+? 匹配1或多次,尽可能少匹配 [a-z]+? abcde
??
{n,m}?
{n,}?

JS与C#用法

C#使用Regex类,参见MSDN

主要用到的方法:

  • 构造
  • IsMatch()
  • Match()
var re = new Regex("Hello World");

JavaScript使用RegExp类,参见Createing a regular expression

  • 构造
  • pattern
  • test()
  • exec()
var reg = /\w{5}/ig
reg.test(s)
reg.exec(s)

参考链接

正则表达式30分组入门教程

RegExp Object

0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x