摘要:记录下自己在学习正则的过程中涉略到的点,以便在以后的应用中随时查看巩固
1.首先明确正则是个什么东西
简单说正则就是一种模式,是一种字符串匹配的模式。也就是说正则就是用来匹配字符串的,例如:用来检查一个字符串中是否还有子串、将匹配到的子串替换,或者从莫一个串中取出符合条件的某个子串。example:
hello+world可以匹配helloworld、hellooworld、heloooooworld,其中的+表示匹配前面的字符至少出现一次。
hello*world可以匹配hellworld、helloworld、hellooworld、heloooooworld,这是因为*表示的是*前面的字符可以出现0次,1次或者多次。
2.正则表达式的构成
正则表达式是由普通字符(例如字符a-z)和特殊字符(称为元字符)组成的文字模式,这种模式描述的是一种在搜索文本时要匹配的一个或者多个字符串。所谓的普通字符是指除元字符外的所有不可打印和打印字符。包括所有的大小写字母,所有的数字,所有的标点符号和一些其他的符号等。
常见的非打印字符有:
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\t 匹配一个制表符。等价于 \x09 和 \cI。
正则中的特殊字符有:
$ 匹配字符串的结尾位置
() 标记一个子表达式的开始和结束位置,则表达式可以供以后获取
* 匹配*前面的字符或者表达式0次,1次或者多少次
+ 匹配*前面的字符或者表达式1次或者多次
. 匹配除换行\n之外的单字符
? 匹配前面的字符或者自表达式0次或1次。或者指明一个非贪婪限定符
\ 转义符
^ 匹配输入字符串的开始位置,除非在方括号中使用,表示非
| 匹配两者之间的选择一个
{ 限定表达式的开始 所谓的限定就是说某个字符限定出现几次
常见的限定符
常见的限定符有或*或+或?或{n}或{n,}或{n,m}
ps: *和+都是贪婪匹配(所谓的贪婪匹配是指尽可能多的匹配文字),只需要在他们后面添加?(也就是说+?和*?) 就可以将其转换为非贪婪(尽可能少的匹配文字)如下的匹配:
贪婪模式下:/<.*>/ 表示已<开始,中间有任意个非换行字符,然后以>结束
在贪婪模式下匹配<h1>hello world</h1> 会从第一个<开始一直匹配到最后一个>,也就是说会尽可能多的匹配
在非贪婪模式下<.*?>只会匹配到<h1> 匹配到第一个>就会停止搜索
正则表达式的应用就是将上面提到的按照各种格式组合使用写出符合需求的正则模式
常见的正则表达式:
1.校验数字的正则表达式
数字: /^\d*$/ 或者 /^[0-9]*$/
n位的数字: /^\d{n}$/ 或者/^[0-9]{n}$/
至少n为的数字:/^\d{n,}$/ 或者/^[0-9]{n,}$/
m-n位的数字: /^\d{m,n}$/ 或者 /^[0-9]{m,n}$/
零和非零开头的数字: /^(0|[1-9][0-9]*)$/
非零开头的最多带两位小数的数字: /^([1-9][0-9]*)+(\.[1-9]{0,2})?$/
带1-2位小数的正数或者负数: /^(-)?[1-9][0-9]?\.[0-9]{1,2}$/ 或者/^(-)?\d+(\.\d{1,2})$/
正数、负数、小数: /^(-)?\d+(\.\d+)?$/
有两位小数的正实数: /^\d+\.\d{2}$/
有1到3位小数的正实数: /^\d+\.\d{1,3}/
非零的正整数: /^[1-9]*$/ 或者 /^\+?[1-9][0-9]*$/
非零的负整数: /^\-[1-9][0-9]*$/
非负整数: /^\d+$/ 或者/^[1-9][0-9]*|0$/
非正整数: /^-\d+$/ 或者 /^-[1-9]\d*|0$/
非负浮点数: 包含例如10. 或者 10.00233 或者 0.2223 或者 .33333 或者0,或者10(整数可以认为是特殊的浮点数)像这样格式的都可以认为是浮点数,那么正则就应该这样写
/^\d+(\.\d+)?$/ 或者 /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$/
非正浮点数 /^((-\d+(\.\d+)?)|(0+(\.0+)?))$/
浮点数 /^(-?\d+)(\.\d+)$/
校验字符的正则
汉字 /^[\u4e00-\u9fa5]{0,}$/
英文和数字 /^[a-zA-Z0-9]$/
长度为3到20的所有字符 /^.{3,20}$/
由26个英文字母,数字,下划线组成的字符 /^\w+$/
网友评论