正则表达式简介与常用表示

1、正则表达式是用来进行文本处理的技术,是与语言无关的一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式

2、元字符

整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$

只能输入数字:"^[0-9]*$"。

只能输入n位的数字:"^\d{n}$"。

只能输入至少n位的数字:"^\d{n,}$"。

只能输入m~n位的数字:。"^\d{m,n}$"

只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。

只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。

只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。

只能输入非零的正整数:"^\+?[1-9][0-9]*$"。

只能输入非零的负整数:"^\-[1-9][]0-9"*$。

只能输入长度为3的字符:"^.{3}$"。

只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。

只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。

只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。

只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。

只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。

验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。

验证是否含有^%&‘‘,;=?$\"等字符:"[^%&‘‘,;=?$\x22]+"。

只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"

验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。

验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。

验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。

验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。

验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。

验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$

只能输入数字:"^[0-9]*$"。

只能输入n位的数字:"^\d{n}$"。

只能输入至少n位的数字:"^\d{n,}$"。

只能输入m~n位的数字:。"^\d{m,n}$"

只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。

只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。

只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。

只能输入非零的正整数:"^\+?[1-9][0-9]*$"。

只能输入非零的负整数:"^\-[1-9][]0-9"*$。

只能输入长度为3的字符:"^.{3}$"。

只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。

只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。

只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。

只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。

只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。

验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。

验证是否含有^%&‘‘,;=?$\"等字符:"[^%&‘‘,;=?$\x22]+"。

只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"

验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。

验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。

验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。

验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。

验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。

验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。

3、Regex静态类常用的4种情况

1)        判断是否匹配:Regex.IsMatch("字符串","正则表达式");

IsMatch的正则表达式,一般要加^$,因为它是精确判断是否匹配。

2)        字符串提取:Regex.Match("字符串","正则表达式"); 只能提取一次,一般也加^$

3)        字符串提取(循环提取所有匹配的):Regex.Matches("字符串","正则表达式");

Matches[在字符串中寻找要查找的内容]的时候,直接写表达式,不需要^$

4)        字符串替换:Regex.Replace("字符串","匹配的正则","替换的正则");

4、练习

I)        IsMatch

1)        判断是否是合法的邮政编码(6位数字)

Regex.IsMatch(s, @"^\d{6}$")

2)        判断一个字符串是不是身份证号码,即是否是15或18位数字

Regex.IsMatch(s, @"^\d{15}|\d{18}$")

分析: 匹配“以15位数字开始”或者“以18位数字结束”( | 的优先级最低,最后执行)

3)        判断一个字符串是否是合法的Email地址

Regex.IsMatch(s, @"^\w+@\w+(\.\w+)+$")

4)        匹配IP地址,4段用.分割的最多三位数字。 192.168.54.77、333.333.333.333假设都是正确的

Regex.IsMatch(s, @"^\d{1,3}(\.\d{1,3}){3}$")

5)        判断是否是合法的日期格式“2008-08-08”。四位数字-两位数字-两位数字

要求:年份必须是19**或者20**,月份必须在01--12,日必须在01-31

下面的写法是错误的,因为|的优先级最低,如果你将并列的选项用括号括起来,判断完数字后,会进行)、(的或运算,就乱了!

Regex.IsMatch(s, @"^(19|20)\d{2}-(0[1-9])|(1[0-2])-(0[1-9])|([12]\d)|(3[01])$")

正确的写法!

Regex.IsMatch(s, @"^(19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$")

6)        判断是否是合法的url地址,http://www.test.com/a.htm?id=3&name=aaa(问号后面的可有可无)

Regex.IsMatch(s, @"^\w+://\w+(\.\w+)+(\?\w+=\w+(&\w+=\w+)*)?$")

II)        Match & Matches

1)        从文件路径中提取出文件名(包含后缀)

string s = "C:/funny/make/1.txt";

Match m=Regex.Match(s, @".+/(.+)");

if (m.Success)

{

Console.WriteLine(m.Groups[1].Value);

}

2)        从“June      26  ,      1951”中提取出月份June来

string s = "June      26  ,      1951";

Match m=Regex.Match(s, @"(\w+)\s+\d+.+\d+");

if (m.Success)

{

Console.WriteLine(m.Groups[1].Value);

}

Console.ReadKey();

3)        从Email中提取出用户名和域名,比如从[email protected]中提取出test和163.com。

string s = "[email protected]";

Match m=Regex.Match(s, @"^(.+)@(.+)$");

string name = m.Groups[1].Value;

string field = m.Groups[2].Value;

Console.WriteLine("用户名是{0},域名是{1}",name,field);

4)        从一段文本中提取所有的数字

string s = "大家好,我是Hebe,我22岁了,身高180,我们团队有3个女女!";

MatchCollection mc= Regex.Matches(s, @"\d+");

foreach (Match m in mc)

{

Console.WriteLine(m.Value);

}

Console.ReadKey();

5)        从字符串中提取所有人名

string s = "大家好。我们是牛人。我是Jason。我是Jay。呜呜。fffff";

MatchCollection mc = Regex.Matches(s, @"我是(\w+)");

foreach (Match m in mc)

{

Console.WriteLine(m.Groups[1].Value);

}

Console.ReadKey();

6)        从一个网站页面提取所有Email地址

StringBuilder sb = new StringBuilder();

//有问题的话把8080端口号加上,那个default网站的地址

string path = "http://localhost:8080/";

//创建WebClient

WebClient wc = new WebClient();

//注意编码问题(!!!)

wc.Encoding = Encoding.UTF8;

//从网站下载字符串

string content=wc.DownloadString(path);

//要会写正则

MatchCollection mc = Regex.Matches(content, @"\w+@\w+(\.\w)+");

foreach (Match m in mc)

{

if (m.Success)

{

sb.AppendLine(m.Value);

}

}

Console.WriteLine(sb.ToString());

Console.ReadKey();

7)        从网站抓取所有的图片地址,下载到硬盘(网站所在目录用Cassini搭建一个)

//默认网站所在的目录

string address = "http://localhost:8080/";

WebClient wc = new WebClient();

wc.Encoding = Encoding.Default;

//取得网站的字符串信息

string str=wc.DownloadString(address);

//通过观察,分析出图片的存储形式

MatchCollection mc = Regex.Matches(str, @"src=""(hotgirls/(\d{2}_\d{2}\.jpg))""");

foreach (Match m in mc)

{

//得到每一幅图片的物理全路径

string picAddr=Path.Combine(address,m.Groups[1].Value);

//下载图片到自己指定的路径(且图片名称与网站上图片的名称一样)

wc.DownloadFile(picAddr, Path.Combine(@"E:",m.Groups[2].Value));

}

8)        抓取所有超链接

StringBuilder sb = new StringBuilder();

//默认网站所在的目录

string address = "http://localhost:8080/";

WebClient wc = new WebClient();

wc.Encoding = Encoding.UTF8;

//取得网站的字符串信息

string str=wc.DownloadString(address);

//通过观察,分析出图片的存储形式

//要非某一项的话(<a href=[^>]+>[^<]+</a>),^一定要用[]括起来

MatchCollection mc = Regex.Matches(str, @"<a href=[^>]+>[^<]+</a>");

foreach (Match m in mc)

{

sb.AppendLine(m.Value);

}

Console.WriteLine(sb.ToString());

Console.ReadKey();

III)        Replace

1)        删除所有连续的a,其实就是将连续的a替换为空字符串。

string s = "你aaa好aa哈哈a你";

s=Regex.Replace(s, @"a+", "");

Console.WriteLine(s);

Console.ReadKey();

2)        我的生日是05/21/2010耶”转换为“我的生日是2010年05月21日耶

string s = "我的生日是05/21/2010耶";

s=Regex.Replace(s, @"(\d{2})/(\d{2})/(\d{4})", "$3年$1月$2日");

Console.WriteLine(s);

Console.ReadKey();

3)        hello ‘welcome to‘  beautiful‘China‘ 输出  hello 【welcome to】  beautiful【China】

string s = " hello ‘welcome to‘  beautiful‘China‘  ";

//贪婪模式(?一般用来修饰+)

s=Regex.Replace(s, @"‘(.+?)‘", "【$1】");

Console.WriteLine(s);

Console.ReadKey();

4)        http://www.test.com  替换为  <a href="http://www.test.com">http://www.test.com</a>

string s = "http://www.test.com";

s=Regex.Replace(s, @"(.+)", @"<a href=""$1"">$1</a>");

Console.WriteLine(s);

Console.ReadKey();

5)        将文本中连续的空格替换为一个空格.

“hello        welcome    to China.”→”hello welcome to China”

string s = "hello        welcome    to China.";

s=Regex.Replace(s, @"(\s)+", @"$1");

Console.WriteLine(s);

Console.ReadKey();

6)        UBB翻译

将[URL=http://www.linuxidc.com]Linux公社[/URL]替换为<a                        href="http://www.linuxidc.com">Linux公社</a>

string s = "[URL=http://www.linuxidc.com]Linux公社[/URL]";

string str = Regex.Replace(s, @".+=(.+)\](.+)\[.+", @"<a href=""$1"">$2</a>");

Console.WriteLine(str);

Console.ReadKey();

Linux正则表达式特性及BRE与ERE的区别 http://www.linuxidc.com/Linux/2014-03/99152.htm

grep使用简明及正则表达式 http://www.linuxidc.com/Linux/2013-08/88534.htm

正则表达式的用法 http://www.linuxidc.com/Linux/2013-03/81897.htm

正则表达式之零宽断言 http://www.linuxidc.com/Linux/2013-03/81897.htm

Linux中正则表达式与文件格式化处理命令(awk/grep/sed) http://www.linuxidc.com/Linux/2013-03/81018.htm

基础正则表达式 http://www.linuxidc.com/Linux/2014-09/106296.htm

常用正则表达式整理 http://www.linuxidc.com/Linux/2014-10/108076.htm

时间: 2024-10-02 09:45:32

正则表达式简介与常用表示的相关文章

正则表达式简介与常用表达

1.正则表达式是用来进行文本处理的技术,是与语言无关的 一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式 2.元字符 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n}$". 只能输入至少n位的数字:"^\d{n,}$". 只能输入m~n位的数字:."^\d{m,n}$" 只能输入零和非零开头的数字:"^(0|

刨根究底正则表达式之一——正则表达式简介

声明: 本系列文章的主要参考书有: <精通正则表达式>英文版及中文版 作者: Jeffrey E·F·Friedl 译者:余晟 电子工业出版社 2012-07 <正则指引>作者:余晟 电子工业出版社 2012-05 <正则表达式必知必会>作者:Ben Forta 译者:杨涛 人民邮电出版社2015-01 <冒号课堂:编程范式与OOP思想>作者:郑晖 电子工业出版社 2009-10 同时,还参考了网上的大量资料,除了少部分资料由于未作大量修改(但基本上也有少量

Linux的简介及常用命令

Linux的组成: 内核:是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序. shell:是系统的用户界面,提供了用户和内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行,是一个命令解释器.但它不仅使命令解释器,而且还是高级编程语言,shell编程. 文件系统:文件系统是文件存放在磁盘等存储设备上的组织方法,Linux支持多种文件系统,如:ext3,ext2,NFS,SMB,iso9660等 应用程序:标准的Linux操作系统都会有一套应用程序例如X-Windo

自动化运维工具ansible--笔记一之简介安装/常用模块

 目录:      简介安装      常用模块 简介安装: yum -y install ansible ssh-keygen -t rsa ssh-copy-id -i .ssh/id_rsa.pub [email protected] ansible -m  模块  -a 指定向模块传递的参数  -f 并发书 -k 默认基于密钥,使用基于口令认证 -i PATH : 指明使用的host inventory文件路径 vim ansible.cfg host_key_checking = Fa

正则表达式简介

初次接触正则表达式的读者除了感觉它有些繁琐外,还会有一种深不可测的感觉.其实正则表达式就是描述字符排列模式的一种自定义的语法规则,在PHP给我们提供的系统函数中,使用这种模式对字符串进行匹配.查找.替换及分割等操作.它的应用非常广泛.例如,常见的使用正则表达式去验证用户在表单中提交的用户名.密码.E-mail地址.身份证号码及电话号码等格式是否合法:在用户发布文章时,将输入有URL的地方全部加上对应的连接:按所有标点符号计算文章中一共有多少个句子:抓取网页中某种格式的数据等.正则表达式并不是PH

Delphi 正则表达式语法(4): 常用转义字符与 .

Delphi 正则表达式语法(4): 常用转义字符与 . // \d 匹配所有数字, 相当于 [0-9] var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := '期待Delphi 2008 for Win32!';   reg.RegEx  := '\d';   reg.Replacement := '◆';   reg.ReplaceAll;   ShowMessage(reg.Subjec

Python正则表达式简介

Python正则表达式简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 就其本质而言,正则表达式(或RE模块)是一种小型的,高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过re模块实现.正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行. 原文地址:https://www.cnblogs.com/yinzhengjie/p/8542361.html

正则表达式 - 简介

正则表达式 - 简介 除非您以前使用过正则表达式,否则您可能不熟悉一些术语.但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念. 例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件.? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符.像 data(\w)?.dat 这样的模式将查找下列文件: data.dat data1.dat data2.dat datax.dat dataN.dat 使用 * 字符代替 ? 字符扩大了找到的文件的数量.data*.

shell脚本简介及常用文本编辑命令

什么是脚本? 脚本简单地说是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的,可以通过记事本打开和编辑 为什么要学习和使用shell shell属于内置脚本 程序开发的效率非常高,依赖于功能强大的命令可以迅速的完成开发任务(批处理) 语法简单,代码写起来比较轻送,简单易学 shell简介 shell是一个C语言编写的脚本语言,它是用户与linux的桥梁,用户输入命令交给shell处理,shell将相应的操作传递给内核,内核把处理的结果输出给用户 Linux 基本思想有两点:第一,一切