在线调试工具
https://c.runoob.com/front-end/854/
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
1、匹配边界
| 语法 |
说明 |
| ^ |
匹配一个输入或一行的开头 |
| & |
匹配一个输入或一行的结尾 |
2、匹配出现次数
| 语法 |
说明 |
| * |
匹配前面元字符0次或多次 |
| + |
匹配前面元字符1次或多次 |
| ? |
匹配前面元字符0次或1次 |
| {n} |
精确匹配n次 |
| {n,} |
匹配n次以上 |
| {n,m} |
匹配n-m次 |
3、匹配多种字符的表达式
| 语法 |
说明 |
| [xyz] |
匹配这个集合中的任一一个字符 |
| [^xyz] |
不匹配这个集合中的任何一个字符 |
| ? |
匹配前面元字符0次或1次 |
| {n} |
精确匹配n次 |
| {n,} |
匹配n次以上 |
| {n,m} |
匹配n-m次 |
4、匹配系列字符集合
| 语法 |
说明 |
| \b |
匹配一个单词的边界 |
| \B |
匹配一个单词的非边界 |
| \d |
匹配一个数字字符,等于[0-9] |
| \D |
匹配一个非数字字符,等于[^0-9] |
| \ |
|
| 匹配一个换行符 |
|
| \ |
|
| 匹配一个回车符 |
|
| \s |
匹配一个空白字符,等于[\ |
| \f\ |
|
| \ \v] |
|
| \S |
匹配一个非空白字符,等于[^\ |
| \f\ |
|
| \ \v] |
|
| \ |
匹配一个制表符 |
| \v |
匹配一个重直制表符 |
| \w |
匹配一个可以组成单词的字符、下划线、数字,实际是除了([0-9a-zA-Z_])还包含了希腊字母,俄文等字母 |
| \W |
匹配一个不可以组成单词的字符、下划线及数字 |
5、正向预查
| 语法 |
说明 |
| (?:pattern) |
匹配结果。Java(?:6 |
| (?=pattern) |
正向匹配。Java(?=6),匹配后面跟着6的Java,即第一个Java,结果Java6 Java7 |
| (?!pattern) |
正向不匹配。Java(?!6),匹配后面不跟着6的Java,即第二个Java,结果Java6 Java7 |
6、反向预查
| 语法 |
说明 |
| (?<=pattern) |
反向匹配。(?<=J)a,匹配紧跟字母J后面的a,结果Java6 Java7 |
| (?<!pattern) |
反向不匹配。(?<!J)a,不匹配紧跟字母J后面的a,结果Java6 Java7 |
备注:Javascript不支持反向预查
7、正则递归(?R)
$string = \"some text (aaa(b(c1)(c2)d)e)(test) more text\";
preg_match_all(\"/\((([^()]*|(?R))*)\)/\", $string, $matches);
以下对各层进行说明
/
\( #看到这里的转义左括号没有?这里是入口,意味着这个正则会从左括号开始匹配
( #这里是分组用
(
[^()]*|(?R) #这里就是递归,相当于[^()]*|(\((([^()]*|递归....
)* #这对括号加上一个星*表明,我要重复递归这件事。
)
\)
/
评论
后参与评论