电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

正则表达式语法及实例整理


发布日期:2018/2/4
 

***正则表达式语法 (字符匹配语法重复匹配语法字符定位语法转义匹配语法)********

(字符

\ 将下一个字符标记为一个非凡字符或一个原义字符或一个 向后引用或一个八进制转义符例如n 匹配字符 n\n 匹配一个换行符序列 \\ 匹配 \\( 则匹配 (

匹配除了换行符以外的任意字符

| 把不同的规则分隔开 例如z|food 能匹配 zfood(z|f)ood 则匹配 zoodfood

只作为连字号

\s 匹配任意的空白符包括空格制表符(Tab)换行符中文全角空格等

\w 匹配字母或数字或下划线或汉字

\W 匹配任意不是字母数字下划线汉字的字符

\S 匹配任意不是空白符的字符

\D 匹配任意非数字的字符

\d 匹配任意数字

[ac] 匹配括号中任意字符abc

[^x] 匹配除了x以外的任意字符

[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

[] 自定义字符

(定位

$ 匹配字符串的结束(前面模式位于字符串末端) 比如^\d{}$ 表示为必须为位到位数字

^ 匹配字符串的开始(定位后面模式开始位置)

\B 匹配不是单词开头或结束的位置(匹配一个非单词边界)

\b 代表单词的开头或结尾也就是单词的分界处(匹配一个单词边界) 比如\bhi\b

\A 前面模式开始位置

\z 前面模式结束位置

\Z 前面模式结束位置(换行前)

(重复

{n} 表示前面的字符必须连续重复匹配n次

+ 匹配重复次或更多次

* 表示任意数量(可能是次)

? 重复零次或一次

{nm} 重复的次数不能少于n次不能多于m次

{n} 重复n次或更多次 比如 \(?\d{}[) ]?\d{}匹配()

*? 重复任意次但尽可能少重复

+? 重复次或更多次但尽可能少重复

?? 重复次或但尽可能少重复

{nm}? 重复n到m次但尽可能少重复

{n}? 重复n次以上但尽可能少重复

(转义

\n 匹配换行

\r 匹配回车

\t 匹配水平制表符

\v 匹配垂直制表符

\f 匹配换页

\nnn 匹配一个进制ASCII

\xnn 匹配一个进制ASCII

\unnnn 匹配进制的Uniode

\c+大写字母 匹配Ctrl大写字母 例如\cS匹配Ctrl+S

(exp) 匹配exp并捕获文本到自动命名的组里

(?<name>exp) 匹配exp并捕获文本到名称为name的组里也可以写成(?nameexp)

(?:exp) 匹配exp不捕获匹配的文本也不给此分组分配组号

(?=exp) 匹配exp前面的位置

(?<=exp) 匹配exp后面的位置

(?!exp) 匹配后面跟的不是exp的位置

(?<!exp) 匹配前面不是exp的位置

(?#comment) 这种类型的组不对正则表达式的处理产生任何影响用于提供注释让人阅读 比如[]\d(?#)|[](?#)|[]?\d\d?(?#)

(?group) 把捕获的内容命名为group并压入堆栈

(?group) 从堆栈上弹出最后压入堆栈的名为group的捕获内容如果堆栈本来为空则本分组的匹配失败

(?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话继续匹配yes部分的表达式否则继续匹配no部分

(?!) 零宽负向先行断言由于没有后缀表达式试图匹配总是失败

\ 这是引用府用来将这里列出的这些元字符当作普通的字符来进行匹配

\< \> 匹配词(word)的开始(\<)和结束(\>)

\( \) 将 \( 和 \) 之间的表达式定义为(group)并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存个)它们可以用 \ 到\ 的符号来引用

IgnoreCase(忽略大小写) 匹配时不区分大小写

Multiline(多行模式) 更改^和$的含义使它们分别在任意一行的行首和行尾匹配而不仅仅在整个字符串的开头和结尾匹配(在此模式下$的精确含意是:匹配\n之前的位置以及字符串

结束前的位置)

Singleline(单行模式) 更改的含义使它与每一个字符匹配(包括换行符\n)

IgnorePatternWhitespace(忽略空白) 忽略表达式中的非转义空白并启用由#标记的注释

RightToLeft(从右向左查找) 匹配从右向左而不是从左向右进行

ExplicitCapture(显式捕获) 仅捕获已被显式命名的组

ECMAScript(JavaScript兼容模式) 使表达式的行为与它在JavaScript里的行为一致

C#构造正则表达式需要涉及Regex类在Regex类中包括IsMatch()匹配Replace()替换Split()拆分和Match的类

public static bool isEmail(string sEmail)

{

if (stringIsNullOrEmpty(sEmail)) { return true; }

return (new Regex([\\w]+(\\[\\w]+)*@[\\w]+(\\[\\w]+)+$)IsMatch(sEmail));

}

****正则表达式实例**********

匹配双字节字符(包括汉字在内)[^\x\xff]

评注可以用来计算字符串的长度(一个双字节字符长度计ASCII字符计

匹配空白行的正则表达式\n\s*\r

评注可以用来删除空白行

匹配HTML标记的正则表达式<(\S*?)[^>]*>*?</\>|<*? />

评注网上流传的版本太糟糕上面这个也仅仅能匹配部分对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式^\s*|\s*$

评注可以用来删除行首行尾的空白字符(包括空格制表符换页符等等)非常有用的表达式

匹配Email地址的正则表达式\w+([+]\w+)*@\w+([]\w+)*\\w+([]\w+)*

评注表单验证时很实用

匹配网址URL的正则表达式[azAz]+://[^\s]*

评注网上流传的版本功能很有限上面这个基本可以满足需求

匹配帐号是否合法(字母开头允许字节允许字母数字下划线)^[azAZ][azAZ_]{}$

评注表单验证时很实用

匹配国内电话号码\d{}\d{}|\d{}\d{}

评注匹配形式如

匹配腾讯QQ号[][]{}

评注腾讯QQ号从开始

匹配中国邮政编码[]\d{}(?!\d)

评注中国邮政编码为位数字

匹配身份证\d{}|\d{}

评注中国的身份证为位或

匹配ip地址\d+\\d+\\d+\\d+

评注提取ip地址时有用

匹配特定数字

^[]\d*$ //匹配正整数

^[]\d*$ //匹配负整数

^?[]\d*$ //匹配整数

^[]\d*|$ //匹配非负整数(正整数 +

^[]\d*|$ //匹配非正整数(负整数 +

^[]\d*\\d*|\\d*[]\d*$ //匹配正浮点数

^([]\d*\\d*|\\d*[]\d*)$ //匹配负浮点数

^?([]\d*\\d*|\\d*[]\d*|?\+|)$ //匹配浮点数

^[]\d*\\d*|\\d*[]\d*|?\+|$ //匹配非负浮点数(正浮点数 +

^(([]\d*\\d*|\\d*[]\d*))|?\+|$//匹配非正浮点数(负浮点数 +

匹配特定字符串

^[AZaz]+$//匹配由个英文字母组成的字符串

^[AZ]+$//匹配由个英文字母的大写组成的字符串

^[az]+$//匹配由个英文字母的小写组成的字符串

^[AZaz]+$//匹配由数字和个英文字母组成的字符串

^\w+$//匹配由数字个英文字母或者下划线组成的字符串

上一篇:04年五种常用RAD的测验比较(1)

下一篇:老生常谈:代理模式