正则 regular expression(一):
元字符
- ^ 匹配输入字符串的开始位置
- $ 匹配输入字符串的结束位置
- * 匹配前面的子表达式零次或多次
- + 匹配前面的子表达式一次或多次
- ? 匹配前面的子表达式零次或一次
- \d 匹配一个数字字符,等价于[0-9]
- \w 匹配一个包含数字、字母、下划线的任何单个字符,等价于[a-zA-Z0-9_]
- \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
- i 执行对大小写不敏感的匹配
- g 执行全局匹配
中括号[] 的意义
中括号在正则中称为字符组(Character class)。
简单字符组
[abc]代表a,b,c 中的任何一个
示例:
匹配 bat、cat、fat:
regx="[bcf]at",则“haovecatisfatsobat”可以匹配到cat,fat,bat
范围字符组(Range class,与连字符 “-” 一起使用)
如果要匹配0-9可以写成 [0123456789],但有了范围字符组更简洁了,可以写成 [0-9]
[a-z,A-Z]代表英文字母中的任何一个
这里最关键的是连字符 "-",不要理解为减号。 它的意义是“从什么到什么”。
组合字符组(Combination class)
由多种字符组组合一起的字符组
[0-9_a-zA-Z]表示任意数字、下划线、英文字母
需要注意的是,字符组内不要有空格
排除型字符组(Negated character class,与脱字符 “^” 一起使用)
排除型字符组表示:匹配一个未列出的字符(match a character that's not listed),而不是不要匹配列出的字符。
[abc]代表除了a,b,c 以外的任何字符
字符组运算(方括号嵌套+运算符)
方括号里允许嵌套方括号,可以进行∩交,∪并,差运算
[a-d[m-p]]表示a-d或m-p中的任何字符(并)
[a-z&&[def]]表示d,e,f中的任何一个字符(交)
[a-f&&[^bc]]表示a,d,e,f(差)
中括号中的字符不再有特殊的含义
由于“.”代表任意一个字符,所以在正则表达式中如果想使用普通意义的点字符,必须使用[.]
"*"是限定符表示0或多次,如果想表达普通意义的星字符,必须使用[*]
限定修饰符
贪婪限定符 | 惰性限定符 | 说明 |
---|---|---|
* | *? | 匹配零次或多次。 |
+ | +? | 匹配一次或多次。 |
? | ?? | 匹配零次或一次。 |
{n} | {n}? | 准确分配n次。 |
{n,} | {n,}? | 至少匹配 n次。 |
{n,m} | {n,m}? | 从n与m次。 |
数量 n 和 m 是整数常数。
这里的原则是:一般的字符后面追加限定符是(尽可能多)的匹配匹配项,限定符后面追加问号的是(尽可能少)的匹配匹配项。
tips:尽可能多=贪婪,尽可能少=惰性。