为什么使用正则表达式?
通过使用正则表达式,可以:
测试字符串内的模式。
例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
替换文本。
可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
基于模式匹配从字符串中提取子字符串。
可以查找文档内或输入域内特定的文本。
例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。
正则表达式-语法
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、讲匹配的子串替换或者从某个串中取出某个符合条件的子串等。
1、+号代表前面的字符必须至少出现一次(1次或多次)。
2、*号代表字符可以不出现,也可以出现一次或者多次(0次、1次或多次)。
3、?号代表前面的字符最多只可以出现一次(0次或1次)。
普通字符:包括没有显示指定魏元字符的所有可打印和不可打印字符。例如所有大小写字母和数字、所有标点符号和一些其他符号。
特殊字符:也称为元字符。就是一些有特殊含义的字符。若要匹配这些特殊字符,需要转义。
特殊字符包括:
^ :匹配输入字符串的开始位置,但是在方括号表达式中使用时,他表示不接受该字符集。例如:[^[0-9]]+ //匹配有一个或多个不含数字的字符组合
$ :正则表达式的结束标志。
() : 标记一个子表达式的开始和结束的位置。子表达式可以获取供以后使用。
* :匹配前面的子表达式零次或者多次。
+ :匹配前面的子表达式零次或者一次。
. : 匹配除换行符\n之外的任何单个字符。
[ : 标记一个中括号表达式的开始。
? : 匹配前面的子表达式零次或者一次,或指明一个非贪婪限定符。
\ : 转义字符。
{ : 标记限定符表达式的开始。
| : 指明两项之间的一个选择。
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共六种。
正则表达式的限定符有:
* : 匹配前面的子表达式零次或者多次。例如,“zo*” 能匹配“z”以及“zoo”。等价与{0,}。
+ : 匹配前面的子表达式一次或多次。例如,“zo+” 能匹配“zo”以及“zoo”,但是不能匹配“z”。等价与{1,}。
?: 匹配前面的子表达式零次或者一次。例如,“do(es)?”可以匹配“do”、“does”、“doxy”中的“do”。?等于{0,1}。
{n} : n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o
{n,} : n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的”o“,但是能匹配“fooooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等于“o”。
{n,m} : m和n均分为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“foooooood”中的前三个o。“o{0,1}”等价于“o?”。注意在逗号和两个数之间不能有空格。
*、+限定都是贪婪的,因为他们会尽可能多的匹配文字,只有在他们的后面加上一个?就可以实现非贪婪或最小匹配。
定位符:
^ :匹配输入字符串的开始位置,但是在方括号表达式中使用时,他表示不接受该字符集。例如:[^[0-9]]+ //匹配有一个或多个不含数字的字符组合
$ :正则表达式的结束标志。
\b : 匹配一个字边界,即字与空格间的位置。
\B:非字边界匹配。
\w: 匹配字母、数字、下划线。等价于"[A-Za-z0-9_]"。
\W : 匹配非字母、数字、下划线。等价于"[^A-Za-z0-9_]"。
[a-z] //匹配所有的小写字母
[A-Z] //匹配所有的大写字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的数字
[0-9\.\-] //匹配所有的数字,句号和减号
[ \f\r\t\n] //匹配所有的白字符
[^a-z] //除了小写字母以外的所有字符
[^\\\/\^] //除了(\)(/)(^)之外的所有字符
[^\"\'] //除了双引号(")和单引号(')之外的所有字符
常用正则表达式
一、校验数字的表达式
数字:^[0-9]*$
非零开头的数字:^[1-9][0-9]*$
匹配n位数字:^\d{n}$
匹配至少n位的数字:^\d{n,}$
m-n位的数字:^\d{m,n}$
匹配零或非零开头的数字:^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$
带1-2位小数的正数或复数:^(\-)?\d+(\.\d{1,2})$
正数、负数和小数:^(\+|\-)?\d+(\.\d+)?$
有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$
有1-3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$
非零的正整数:^[1-9]\d*$或者^\+?[1-9][0-9]*$或者^([1-9][0-9]*){1,3}$
非零的负整数:^(\-[1-9][0-9]*)$或者^-[1-9]\d*$
非负整数:^[1-9]\d*$或者^\d*$或者^\d+$
非负浮点数:^(\d*)+(\.\d+)$
非正浮点数:^\-(\d*)+(\.\d+)$
正浮点数:^(\d*)+(\.\d*)$或者^(\+\d*)+(\.\d*)$
负浮点数:^(\-\d*)+(\.\d*)$
浮点数:^(\-?\d*)+(\.\d*)$
二、校验字符的表达式
汉字:^[\u4e00-\u9fa5]{0,}$
英文和数字:^[A-Za-z0-9]+$
长度为3-20的所有字符:^.{3,20}$
由26个英文字母组成的字符串:^[A-Za-z]+$
由26个大写英文字母组成的字符串:^[A-Z]+$
由26个小写英文字母组成的字符串:^[a-z]+$
由数字和26个英文字母组成的字符串:^[0-9A-Za-z]+$
由数字、26个英文字母或者下划线组成的字符串:^\w+$或者^\w{3,20}$
中文、数字、英文包括下划线的下划线: ^[\u4E00-\u9FA5A-Za-z0-9_]+$
中文、数字、英文但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$或者^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
不包括^%&';=?$\等字符:^[^%&',;=?$\x22]+$
禁止输入含有~的字符:^[^~\x22]+$
网友评论