^
出现在开头表示字符边界,在中括号开头表示非,在其它地方就表示字符^
正则表达式的() [] {}
有不同的意思。
()
是为了提取匹配的字符串。表达式中有几个()
就有几个相应的匹配字符串。(\s*)
表示连续空格的字符串。[]
是定义匹配的字符范围。比如[a-zA-Z0-9]
表示相应位置的字符要匹配英文字符和数字。[\s*]
表示空格或者*号。{}
一般用来表示匹配的长度,比如\s{3}
表示匹配三个空格,\s[1,3]
表示匹配一到三个空格。(0-9)
匹配 '0-9
′ 本身。[0-9]*
匹配数字(注意后面有*
,可以为空)[0-9]+
匹配数字(注意后面有+
,不可以为空){1-9}
写法错误。[0-9]{0,9}
表示长度为 0 到 9 的数字字符串。
正则表达式:非贪婪式匹配
有时候我们使用正则表达式只希望尽可能少的匹配。
比如在对html
文件进行正则匹配时:
<span>a</span><span>b</span>
如果我们使用.*
匹配
<span>.*</span>
匹配结果是
<span>a</span><span>b</span>
很明显不能满足我们的需求。
这时候我们就需要使用非贪婪式匹配,也可以称为懒惰匹配
懒惰匹配与贪婪匹配的差别就是在贪婪匹配的后面加个?
号
同样对上面的html
进行匹配,我们使用.*?
匹配结果是
<span>a</span>
和我们预期效果一样。
除了.*?
这种匹配方式,非贪婪式匹配还包括:
.+? 匹配一次
.?? 不匹配
.{m,n}? 匹配m次