什么是正则表达式?正则表达式又称规则表达式,英文名为Regular Expression在代码中简写为regex、regexp或RE。正则表达式通常被用来检索、替换那些符合某个模式的文本
1.0简单的正则表达式
例:him,history,high,hi在这个字符串中匹配出hi
正则表达式:hi
若要精确的匹配出hi,正则表达式:\bhi\b
\b是正则表达式规定的一个特殊代码,我们把它叫做元字符,单词的开头或结尾,也就是单词的分界处,它只匹配一个位置
1.1元字符的讲解
代码 说明
. 匹配处换行符以外的任意字符
\w 匹配数字字母或下划线或汉字
\s 匹配任意空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
1.2字符转义‘\’
如果你想查找元字符本身的话,比如你查找.,或者*,就出现问题:你没法指定他们,因为他们会被解释成其他的意思。这时你就必须使用\来取消这些字符的特殊意义。因此,你因该使用.和*当然,要查找\本身,你也的用\\。
1.3常用的限定符(重复)
代码 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
1.4反义
代码/语法 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了ariou这几个字母以外的任意字符
1.5替换
问题2:写一个正则表达式用于匹配几种格式的电话号码
例如:(010)88886666,或020-22334455,或02912345678
正则表达式:\(0\d{2}[)]\d{8}|0\d{2}[- ]?\d{8}
特别说明:使用替换时,顺序很重要的\d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。
美国邮编的规则时5位数字,或者用连字号间隔的9位数字
如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。
原因是匹配替换时,将会从左到右地测试每个分支条件,如果满足了某个分支的话,就不会管其他单独替换条件了。
1.6分组语法
零宽断言
(?=exp) 匹配exp前面的位置
(?<exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
1.7贪婪与懒惰
贪婪:当正则表达式中包含能接受重复限定符时,通常的行为是(在使整个表达式能得到匹配的前提下匹配尽可能多的字符)。这也被称为贪狼匹配
懒惰:有时,我们需要懒惰匹配,也就是匹配尽可能的少的字符。
如果将前面给出的限定符转换为懒惰匹配模式,只需要在它后面加上一个问号?
懒惰限定符
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复
下面在给大家分享一些有用的C#正则表达式
"^\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数
"^((-\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //负整数
"^-?\d+$" //整数
"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数
"^(-?\d+)(\.\d+)?$" //浮点数
"^[A-Za-z]+$" //由26个英文字母组成的字符串
"^[A-Z]+$" //由26个英文字母的大写组成的字符串
"^[a-z]+$" //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串
"^\w+$" //由数字、26个英文字母或者下划线组成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码
C#正则表达式
图片 src[^>]*[^/].(?:jpg|bmp|gif)(?:\"|\')
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数)