营销网站建设的规则,网站建设公司特点,wordpress调用icon,wordpress支持系统正则表达式 是一种匹配输入文本的模式。.Net 框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。
定义正则表达式
下面列出了用于定义正则表达式的各种类别的字符、运算符和结构。
字符转义字符类定位点分组构造限定符反向引用构造备用构造…正则表达式 是一种匹配输入文本的模式。.Net 框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。
定义正则表达式
下面列出了用于定义正则表达式的各种类别的字符、运算符和结构。
字符转义字符类定位点分组构造限定符反向引用构造备用构造替换杂项构造
字符转义
正则表达式中的反斜杠字符\指示其后跟的字符是特殊字符或应按原义解释该字符。
下表列出了转义字符 转义字符 描述 模式 匹配 \a 与报警 (bell) 符 \u0007 匹配。 \a Warning! \u0007 中的 \u0007 \b 在字符类中与退格键 \u0008 匹配。 [\b]{3,} \b\b\b\b 中的 \b\b\b\b \t 与制表符 \u0009 匹配。 (\w)\t Name\tAddr\t 中的 Name\t 和 Addr\t \r 与回车符 \u000D 匹配。\r 与换行符 \n 不是等效的。 \r\n(\w) \r\Hello\nWorld. 中的 \r\nHello \v 与垂直制表符 \u000B 匹配。 [\v]{2,} \v\v\v 中的 \v\v\v \f 与换页符 \u000C 匹配。 [\f]{2,} \f\f\f 中的 \f\f\f \n 与换行符 \u000A 匹配。 \r\n(\w) \r\Hello\nWorld. 中的 \r\nHello \e 与转义符 \u001B 匹配。 \e \x001B 中的 \x001B \ nnn 使用八进制表示形式指定一个字符nnn 由二到三位数字组成。 \w\040\w a bc d 中的 a b 和 c d \x nn 使用十六进制表示形式指定字符nn 恰好由两位数字组成。 \w\x20\w a bc d 中的 a b 和 c d \c X \c x 匹配 X 或 x 指定的 ASCII 控件字符其中 X 或 x 是控件字符的字母。 \cC \x0003 中的 \x0003 (Ctrl-C) \u nnnn 使用十六进制表示形式匹配一个 Unicode 字符由 nnnn 表示的四位数。 \w\u0020\w a bc d 中的 a b 和 c d \ 在后面带有不识别的转义字符时与该字符匹配。 \d[\-x\*]\d\d[\-x\*\d (22) * 3*9 中的 22 和 3*9
字符类
字符类与一组字符中的任何一个字符匹配。
下表列出了字符类 字符类 描述 模式 匹配 [character_group] 匹配 character_group 中的任何单个字符。 默认情况下匹配区分大小写。 [mn] mat 中的 mmoon 中的 m 和 n [^character_group] 非与不在 character_group 中的任何单个字符匹配。 默认情况下character_group 中的字符区分大小写。 [^aei] avail 中的 v 和 l [ first - last ] 字符范围与从 first 到 last 的范围中的任何单个字符匹配。 (\w)\t Name\tAddr\t 中的 Name\t 和 Addr\t . 通配符与除 \n 之外的任何单个字符匹配。 若要匹配原意句点字符. 或 \u002E您必须在该字符前面加上转义符 (\.)。 a.e have 中的 ave mate 中的 ate \p{ name } 与 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 \p{Lu} City Lights 中的 C 和 L \P{ name } 与不在 name 指定的 Unicode 通用类别或命名块中的任何单个字符匹配。 \P{Lu} City 中的 i、 t 和 y \w 与任何单词字符匹配。 \w Room#1 中的 R、 o、 m 和 1 \W 与任何非单词字符匹配。 \W Room#1 中的 # \s 与任何空白字符匹配。 \w\s ID A1.3 中的 D \S 与任何非空白字符匹配。 \s\S int __ctr 中的 _ \d 与任何十进制数字匹配。 \d 4 IV 中的 4 \D 匹配不是十进制数的任意字符。 \D 4 IV 中的 、 、 、 I 和 V
定位点
定位点或原子零宽度断言会使匹配成功或失败具体取决于字符串中的当前位置但它们不会使引擎在字符串中前进或使用字符。
下表列出了定位点 断言 描述 模式 匹配 ^ 匹配必须从字符串或一行的开头开始。 ^\d{3} 567-777- 中的 567 $ 匹配必须出现在字符串的末尾或出现在行或字符串末尾的 \n 之前。 -\d{4}$ 8-12-2012 中的 -2012 \A 匹配必须出现在字符串的开头。 \A\w{4} Code-007- 中的 Code \Z 匹配必须出现在字符串的末尾或出现在字符串末尾的\n 之前。 -\d{3}\Z Bond-901-007 中的 -007 \z 匹配必须出现在字符串的末尾。 -\d{3}\z -901-333 中的 -333 \G 匹配必须出现在上一个匹配结束的地方。 \\G\(\d\) (1)(3)(5)[7](9) 中的 (1)、 (3) 和 (5) \b 匹配必须出现在 \w字母数字和 \W非字母数字字符之间的边界上。 \w Room#1 中的 R、 o、 m 和 1 \B 匹配不得出现在 \b 边界上。 \Bend\w*\b end sends endure lender 中的 ends 和 ender
分组构造
分组构造描述了正则表达式的子表达式通常用于捕获输入字符串的子字符串。
下表列出了分组构造 分组构造 描述 模式 匹配 ( subexpression ) 捕获匹配的子表达式并将其分配到一个从零开始的序号中。 (\w)\1 deep 中的 ee (? name subexpression) 将匹配的子表达式捕获到一个命名组中。 (? double\w)\k double deep 中的 ee (? name1 -name2 subexpression) 定义平衡组定义。 (((?Open\()[^\(\)]*)((?Close-Open\))[^\(\)]*))*(?(Open)(?!))$ 32^((1-3)*(3-1)) 中的 ((1-3)*(3-1)) (?: subexpression) 定义非捕获组。 Write(?:Line)? Console.WriteLine() 中的 WriteLine (?imnsx-imnsx:subexpression) 应用或禁用 subexpression 中指定的选项。 A\d{2}(?i:\w)\b A12xl A12XL a12xl 中的 A12xl 和 A12XL (? subexpression) 零宽度正预测先行断言。 \w(?\.) He is. The dog ran. The sun is out. 中的 is、 ran 和 out (?! subexpression) 零宽度负预测先行断言。 \b(?!un)\w\b unsure sure unity used 中的 sure 和 used (? subexpression) 零宽度正回顾后发断言。 (?19)\d{2}\b 1851 1999 1950 1905 2003 中的 99、50和 05 (? ! subexpression) 零宽度负回顾后发断言。 (? !19)\d{2}\b end sends endure lender 中的 ends 和 ender (? subexpression) 非回溯也称为贪婪子表达式。 [13579](?AB) 1ABB 3ABBC 5AB 5AC 中的 1ABB、 3ABB 和 5AB
实例
using System;
using System.Text.RegularExpressions;public class Example
{public static void Main(){string input 1851 1999 1950 1905 2003;string pattern (?19)\d{2}\b;foreach (Match match in Regex.Matches(input, pattern))Console.WriteLine(match.Value);}
}
运行实例 »
限定符
限定符指定在输入字符串中必须存在上一个元素可以是字符、组或字符类的多少个实例才能出现匹配项。 限定符包括下表中列出的语言元素。
下表列出了限定符 限定符 描述 模式 匹配 * 匹配上一个元素零次或多次。 \d*\.\d .0、 19.9、 219.9 匹配上一个元素一次或多次。 be been 中的 bee bent 中的 be ? 匹配上一个元素零次或一次。 rai?n ran、 rain { n } 匹配上一个元素恰好 n 次。 ,\d{3} 1,043.6 中的 ,043 9,876,543,210 中的 ,876、 ,543 和 ,210 { n ,} 匹配上一个元素至少 n 次。 \d{2,} 166、 29、 1930 { n , m } 匹配上一个元素至少 n 次但不多于 m 次。 \d{3,5} 166 17668 193024 中的 19302 *? 匹配上一个元素零次或多次但次数尽可能少。 \d*?\.\d .0、 19.9、 219.9 ? 匹配上一个元素一次或多次但次数尽可能少。 be? been 中的 be bent 中的 be ?? 匹配上一个元素零次或一次但次数尽可能少。 rai??n ran、 rain { n }? 匹配前导元素恰好 n 次。 ,\d{3}? 1,043.6 中的 ,043 9,876,543,210 中的 ,876、 ,543 和 ,210 { n ,}? 匹配上一个元素至少 n 次但次数尽可能少。 \d{2,}? 166、 29 和 1930 { n , m }? 匹配上一个元素的次数介于 n 和 m 之间但次数尽可能少。 \d{3,5}? 166 17668 193024 中的 193 和 024
反向引用构造
反向引用允许在同一正则表达式中随后标识以前匹配的子表达式。
下表列出了反向引用构造 反向引用构造 描述 模式 匹配 \ number 反向引用。 匹配编号子表达式的值。 (\w)\1 seek 中的 ee \k name 命名反向引用。 匹配命名表达式的值。 (? char\w)\k char seek 中的 ee
备用构造
备用构造用于修改正则表达式以启用 either/or 匹配。
下表列出了备用构造 备用构造 描述 模式 匹配 | 匹配以竖线 (|) 字符分隔的任何一个元素。 th(e|is|at) this is the day. 中的 the 和 this (?( expression )yes | no ) 如果正则表达式模式由 expression 匹配指定则匹配 yes否则匹配可选的no 部分。 expression 被解释为零宽度断言。 (?(A)A\d{2}\b|\b\d{3}\b) A10 C103 910 中的 A10 和 910 (?( name )yes | no ) 如果 name 或已命名或已编号的捕获组具有匹配则匹配 yes否则匹配可选的 no。 (? quoted)?(?(quoted).?|\S\s) Dogs.jpg Yiska playing.jpg 中的 Dogs.jpg 和 Yiska playing.jpg
替换
替换是替换模式中使用的正则表达式。
下表列出了用于替换的字符 字符 描述 模式 替换模式 输入字符串 结果字符串 $number 替换按组 number 匹配的子字符串。 \b(\w)(\s)(\w)\b $3$2$1 one two two one ${name} 替换按命名组 name 匹配的子字符串。 \b(? word1\w)(\s)(? word2\w)\b ${word2} ${word1} one two two one $$ 替换字符$。 \b(\d)\s?USD $$$1 103 USD $103 $ 替换整个匹配项的一个副本。 (\$*(\d*(\.\d)?){1}) **$ $1.30 **$1.30** $ 替换匹配前的输入字符串的所有文本。 B $ AABBCC AAAACC $ 替换匹配后的输入字符串的所有文本。 B $ AABBCC AACCCC $ 替换最后捕获的组。 B(C) $ AABBCCDD AACCDD $_ 替换整个输入字符串。 B $_ AABBCC AAAABBCCCC
杂项构造
下表列出了各种杂项构造 构造 描述 实例 (?imnsx-imnsx) 在模式中间对诸如不区分大小写这样的选项进行设置或禁用。 \bA(?i)b\w\b 匹配 ABA Able Act 中的 ABA 和 Able (?#注释) 内联注释。该注释在第一个右括号处终止。 \bA(?#匹配以A开头的单词)\w\b # [行尾] 该注释以非转义的 # 开头并继续到行的结尾。 (?x)\bA\w\b#匹配以 A 开头的单词
Regex 类
Regex 类用于表示一个正则表达式。
下表列出了 Regex 类中一些常用的方法 序号 方法 描述 1 public bool IsMatch( string input ) 指示 Regex 构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项。 2 public bool IsMatch( string input, int startat ) 指示 Regex 构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项从字符串中指定的开始位置开始。 3 public static bool IsMatch( string input, string pattern ) 指示指定的正则表达式是否在指定的输入字符串中找到匹配项。 4 public MatchCollection Matches( string input ) 在指定的输入字符串中搜索正则表达式的所有匹配项。 5 public string Replace( string input, string replacement ) 在指定的输入字符串中把所有匹配正则表达式模式的所有匹配的字符串替换为指定的替换字符串。 6 public string[] Split( string input ) 把输入字符串分割为子字符串数组根据在 Regex 构造函数中指定的正则表达式模式定义的位置进行分割。
如需了解 Regex 类的完整的属性列表请参阅微软的 C# 文档。
实例 1
下面的实例匹配了以 S 开头的单词
using System;
using System.Text.RegularExpressions;namespace RegExApplication
{class Program{private static void showMatch(string text, string expr){Console.WriteLine(The Expression: expr);MatchCollection mc Regex.Matches(text, expr);foreach (Match m in mc){Console.WriteLine(m);}}static void Main(string[] args){string str A Thousand Splendid Suns;Console.WriteLine(Matching words that start with S: );showMatch(str, \bS\S*);Console.ReadKey();}}
}
当上面的代码被编译和执行时它会产生下列结果
Matching words that start with S:
The Expression: \bS\S*
Splendid
Suns
实例 2
下面的实例匹配了以 m 开头以 e 结尾的单词
using System;
using System.Text.RegularExpressions;namespace RegExApplication
{class Program{private static void showMatch(string text, string expr){Console.WriteLine(The Expression: expr);MatchCollection mc Regex.Matches(text, expr);foreach (Match m in mc){Console.WriteLine(m);}}static void Main(string[] args){string str make maze and manage to measure it;Console.WriteLine(Matching words start with m and ends with e:);showMatch(str, \bm\S*e\b);Console.ReadKey();}}
}
当上面的代码被编译和执行时它会产生下列结果
Matching words start with m and ends with e:
The Expression: \bm\S*e\b
make
maze
manage
measure
实例 3
下面的实例替换掉多余的空格
using System;
using System.Text.RegularExpressions;namespace RegExApplication
{class Program{static void Main(string[] args){string input Hello World ;string pattern \\s;string replacement ;Regex rgx new Regex(pattern);string result rgx.Replace(input, replacement);Console.WriteLine(Original String: {0}, input);Console.WriteLine(Replacement String: {0}, result); Console.ReadKey();}}
}
当上面的代码被编译和执行时它会产生下列结果
Original String: Hello World
Replacement String: Hello World
转载Jacob-wj 比较常用的几个正则表达式(匹配数字)
正则表达式用于字符串处理、表单验证等场合实用高效。现将一些常用的表达式收集于此以备不时之需。
匹配中文字符的正则表达式 [\u4e00-\u9fa5]
评注匹配中文还真是个头疼的事有了这个表达式就好办了 匹配双字节字符(包括汉字在内)[^\x00-\xff]
评注可以用来计算字符串的长度一个双字节字符长度计2ASCII字符计1 匹配空白行的正则表达式\n\s*\r
评注可以用来删除空白行 匹配HTML标记的正则表达式(\S*?)[^]*.*?/\1|.*? /
评注网上流传的版本太糟糕上面这个也仅仅能匹配部分对于复杂的嵌套标记依旧无能为力 匹配首尾空白字符的正则表达式^\s*|\s*$
评注可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)非常有用的表达式 匹配Email地址的正则表达式\w([-.]\w)*\w([-.]\w)*\.\w([-.]\w)*
评注表单验证时很实用 匹配网址URL的正则表达式[a-zA-z]://[^\s]*
评注网上流传的版本功能很有限上面这个基本可以满足需求 匹配帐号是否合法(字母开头允许5-16字节允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注表单验证时很实用 匹配国内电话号码\d{3}-\d{8}|\d{4}-\d{7}
评注匹配形式如 0511-4405222 或 021-87888822 匹配腾讯QQ号[1-9][0-9]{4,}
评注腾讯QQ号从10000开始 匹配中国邮政编码[1-9]\d{5}(?!\d)
评注中国邮政编码为6位数字 匹配身份证\d{15}|\d{18}
评注中国的身份证为15位或18位 匹配ip地址\d\.\d\.\d\.\d
评注提取ip地址时有用 匹配特定数字
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数正整数 0
^-[1-9]\d*|0$ //匹配非正整数负整数 0
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0|0$ //匹配非负浮点数正浮点数 0
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0|0$ //匹配非正浮点数负浮点数 0
评注处理大量数据时有用具体应用时注意修正 匹配特定字符串
^[A-Za-z]$ //匹配由26个英文字母组成的字符串
^[A-Z]$ //匹配由26个英文字母的大写组成的字符串
^[a-z]$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]$ //匹配由数字和26个英文字母组成的字符串
^\w$ //匹配由数字、26个英文字母或者下划线组成的字符串