半小时精通正则表达式

半小时精通正则表达式
半小时精通正则表达式

相册

广场

游戏

河外星系的船长

退出

关注此空间vbs小铺

平静的力量在深的海

半小时精通正则表达式

2006-10-21 17:25

跟我学正则表达式!

想必很多人都对正则表达式都头疼.今天,我以我的认识,加上网上一些文章,希望用常人都可以理解的表达方式.来和大家分享学习经验.

开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明

"^The": 开头一定要有"The"字符串;

"of despair$": 结尾一定要有"of despair" 的字符串;

那么,

"^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配

"notice": 匹配包含notice的字符串

你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边

接着,说说 '*', '+',和 '?',

他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:

"zero or more"相当于{0,},

"one or more"相当于{1,},

"zero or one."相当于{0,1}, 这里是一些例子:

"ab*": 和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串("a", "ab", "abbb", 等);

"ab+": 和ab{1,}同义,同上条一样,但最少要有一个b存在 ("ab", "abbb", 等.);

"ab?":和ab{0,1}同义,可以没有或者只有一个b;

"a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的字符串.

要点, '*', '+',和 '?'只管它前面那个字符.

你也可以在大括号里面限制字符出现的个数,比如

"ab{2}": 要求a后面一定要跟两个b(一个也不能少)("abb");

"ab{2,}": 要求a后面一定要有两个或者两个以上b(如"abb", "abbbb", 等.);

"ab{3,5}": 要求a后面可以有2-5个b("abbb", "abbbb", or "abbbbb").

现在我们把一定几个字符放到小括号里,比如:

"a(bc)*": 匹配 a 后面跟0个或者一个"bc";

"a(bc){1,5}": 一个到5个 "bc."

还有一个字符 '│', 相当于OR 操作:

"hi│hello": 匹配含有"hi" 或者 "hello" 的 字符串;

"(b│cd)ef": 匹配含有 "bef" 或者 "cdef"的字符串;

"(a│b)*c": 匹配含有这样多个(包括0个)a或b,后面跟一个c

的字符串;

一个点('.')可以代表所有的单一字符,不包括"\n"

如果,要匹配包括"\n"在内的所有单个字符,怎么办?

对了,用'[\n.]'这种模式.

"a.[0-9]": 一个a加一个字符再加一个0到9的数字

"^.{3}$": 三个任意字符结尾 .

中括号括住的内容只匹配一个单一的字符

"[ab]": 匹配单个的 a 或者 b ( 和 "a│b" 一样);

"[a-d]": 匹配'a' 到'd'的单个字符 (和"a│b│c│d" 还有 "[abcd]"效果一样); 一般我们都用[a-zA-Z]来指定字符为一个大小写英文

"^[a-zA-Z]": 匹配以大小写字母开头的字符串

"[0-9]%": 匹配含有 形如 x% 的字符串

",[a-zA-Z0-9]$": 匹配以逗号再加一个数字或字母结尾的字符串

你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^' 作为开头 "%[^a-zA-Z]%" 匹配含有两个百分号里面有一个非字母的字符串.

要点:^用在中括号开头的时候,就表示排除括号里的字符

为了PHP能够解释,你必须在这些字符面前后加'',并且将一些字符转义.

不要忘记在中括号里面的字符是这条规路的例外—在中括号里面, 所有的特殊字符,包括(''), 都将失去他们的特殊性质 "[*\ +?{}.]"匹配含有这些字符的字符串.

还有,正如regx的手册告诉我们: "如果列表里含有 ']', 最好把它作为列表里的第一个字符(可能跟在'^'后面). 如果含有'-', 最好把它放在最前面或者最后面, or 或者一个范围的第二个结束点[a-d-0-9]中间的‘-’将有效.

看了上面的例子,你对{n,m}应该理解了吧.要注意的是,n和m都不能为负整数,而且n总是小于m. 这样,才能 最少匹配n次且最多匹配m次. 如"p{1,5}"将匹配 "pvpppppp"中的前五个p

下面说说以\开头的

\b 书上说他是用来匹配一个单词边界,就是...比如've\b',可以匹配love里的ve而不匹配very里有ve

\B 正好和上面的\b相反.例子我就不举了

.....突然想起来....可以到https://www.360docs.net/doc/869119706.html,/article.php/251看看其它用\ 开头的语法

好,我们来做个应用:

如何构建一个模式来匹配 货币数量 的输入

构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式: "1000 0.00" 和 "10,000.00",或者没有小数部分, "10000" and "10,000". 现在让我们开始构建这个匹配模式:

^[1-9][0-9]*$

这是所变量必须以非0的数字开头.但这也意味着 单一的 "0" 也不能通过测试. 以下是解决的方法:

^(0│[1-9][0-9]*)$

"只有0和不以0开头的数字与之匹配",我们也可以允许一个负号在数字之前:

^(0│-?[1-9][0-9]*)$

这就是: "0 或者 一个以0开头 且可能 有一个负号在前面的数字." 好了,现在让我们别那么严谨,允许以0开头.现在让我们放弃 负号 , 因为我们在表示钱币的时候并不需要用到. 我们现在指定 模式 用来匹配小数部分:

^[0-9]+(\.[0-9]+)?$

这暗示匹配的字符串必须最少以一个阿拉伯数字开头. 但是注意,在上面模式中 "10." 是不匹配的, 只有 "10" 和 "10.2" 才可以. (你知道为什么吗)

^[0-9]+(\.[0-9]{2})?$

我们上面指定小数点后面必须有两位小数.如果你认为这样太苛刻,你可以改成:

^[0-9]+(\.[0-9]{1,2})?$

这将允许小数点后面有一到两个字符. 现在我们加上用来增加可读性的逗号(每隔三位), 我们可以这样表示:

^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$

不要忘记 '+' 可以被 '*' 替代 如果你想允许空白字符串被输入话 (为什么?). 也不要忘记反斜杆 ’\’ 在php字符串中可能会出现错误 (很普遍的错误).

现在,我们已经可以确认字符串了, 我们现在把所有逗号都去掉 str_replace(",", "", $money) 然后在把类型看成 double然后我们就可以通过他做数学计算了.

再来一个:

构造检查email的正则表达式

在一个完整的email地址中有三个部分:

1. 用户名 (在 '@' 左边的一切),

2.'@',

3. 服务器名(就是剩下那部分).

用户名可以含有大小写字母阿拉伯数字,句号 ('.'), 减号('-'), and 下划线 ('_'). 服务器名字也是符合这个规则,当然下划线除外.

现在, 用户名的开始和结束都不能是句点. 服务器也是这样. 还有你不能有两个连续的句点他们之间至少存在一个字符,好现在我们来看一下怎么为用户名写一个匹配模式:

^[_a-zA-Z0-9-]+$

现在还不能允许句号的存在. 我们把它加上:

^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$

上面的意思就是说: "以至少一个规范字符(除了.)开头,后面跟着0个或者多个以点开始的字符串."

简单化一点, 我们可以用 eregi()取代 ereg().eregi()对大小写不敏感, 我们就不需要指定两个范围 "a-z" 和 "A-Z" – 只需要指定一个就可以了:

^[_a-z0-9-]+(\.[_a-z0-9-]+)*$

后面的服务器名字也是一样,但要去掉下划线:

^[a-z0-9-]+(\.[a-z0-9-]+)*$

好. 现在只需要用”@”把两部分连接:

^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$

这就是完整的email认证匹配模式了,只需要调用

eregi(‘^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$ ’,$eamil)

就可以得到是否为email了

正则表达式的其他用法

提取字符串

ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册). 比如说,我们想从 path/URL 提取文件名 – 下面的代码就是你需要:

ereg("([^\\/]*)$", $pathOrUrl, $regs);

echo $regs[1];

高级的代换

ereg_replace() 和 eregi_replace()也是非常有用的: 假如我们想把所有的间隔负号都替换成逗号:

ereg_replace("[ \n\r\t]+", ",", trim($str));

最后,我把另一串检查EMAIL的正则表达式让看文章的你来分析一下.

"^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_` a-z{|}~]+$"

如果能方便的读懂,那这篇文章的目的就达到了.

#转载教程

分享到:浏览(1070)评论(1) 转载

帮助中心 | 空间客服 | 投诉中心 | 空间协议 ?2014 Baidu

你可能也喜欢

当我遇上虞美人。。。。。。

再访西雅图------ (19) 华盛顿湖

大港观鸟旅行记(13)悲催的红

春雨

月芽弯弯【东海摄影】显示域用户和本地用户

本文最近访客

评论

4月17日 乌苏三 12月25日 简约的生9月1日 zhaotao_kin 6月27日 维继 5月19日 sunkebd 1月29日

yiyuezhuo

发布

大春815谢谢分享2012-12-27 10:34

回复

JS正则表达式大全

JS正则表达式大全 JS正则表达式大全【1】 正则表达式中的特殊字符【留着以后查用】字符含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" $ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" * 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa + 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa ? 匹配前面元字符0次或1次,/ba*/将匹配b,ba (x) 匹配x保存x在名为$1...$9的变量中 x|y 匹配x或y {n} 精确匹配n次 {n,} 匹配n次以上 {n,m} 匹配n-m次 [xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) [^xyz] 不匹配这个集合中的任何一个字符 [\b] 匹配一个退格符 \b 匹配一个单词的边界 \B 匹配一个单词的非边界 \cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M \d 匹配一个字数字符,/\d/ = /[0-9]/ \D 匹配一个非字数字符,/\D/ = /[^0-9]/ \n 匹配一个换行符 \r 匹配一个回车符 \s 匹配一个空白字符,包括\n,\r,\f,\t,\v等 \S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/ \t 匹配一个制表符 \v 匹配一个重直制表符 \w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配

10分钟学会使用L7防火墙

10分钟学习写正则表达式和使用L7防火墙(以封WINBOX为例) 此短文简单介绍使用了L7配合防火墙禁WINBOX登录,大家可以举一反三,封什么都是可以的,即使它的服务器地址或端口经常变化也一样能封. 我现在想禁WINBOX登录,假设WINBOX的端口经常变动或者也使用与网页一样的80端口(仅仅是假设一下),这时我就不能简单地用禁端口的方法来禁WINBOX.此时可以使用L7配合防火墙过滤器来禁WINBOX登录.下面是操作步步骤: 本帖隐藏的内容 为了抓包方便,关闭WINBOX客户端机器上所有网络软件,再打开wireshark或ethereal来抓包.然后使用WINBOX登录路由器,此时抓包工具会抓到很多数据包,如图. 找到从winbox客户机(192.168.1.210)到routeros路由器(202.1.1.2)的第一个拥有Data 字段的数据包.在此数据包中选中的部分即是WINBOX登录时的特征码,此例我们选DATA字段前5个字符应该可以了.这5个连续字符使用正则表达式表达即是 \x12\x02\x69\x6e\x64\x65或者是\x12\x02ind.使用下面两条命令,你就不能再使用WINBOX登录路由器了. /ip firewall layer7-protocol

add comment="" name=winbox regexp="\\x12\\x02\\x69\\x6e\\x64" /ip firewall filter add chain=input layer7-protocol=winbox action=drop (因为使用winbox是进入路由器的连接,所以加到input链表,如果是封QQ或PPS等,过滤过则要加到forward链表) 这样就结束了,简单吧!

正则表达式

正则表达式 一、什么是这则表达式 正则表达式(regular expressions)是一种描述字符串集的方法,它是以字符串集中各字符串的共有特征为依据的。正则表达式可以用于搜索、编辑或者是操作文本和数据。它超出了java程序设计语言的标准语法,因此有必要去学习特定的语法来构建正则表达式。一般使用的java.util.regex API所支持的正则表达式语法。 二、测试用具 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex{ public static void main(String[]args)throws Exception{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); if(br==null){ System.out.println("没有输入任何数据"); System.exit(1); } while(true){ System.out.print("输入表达式:"); Pattern pattern=https://www.360docs.net/doc/869119706.html,pile(br.readLine()); System.out.print("输入字符串:"); Matcher matcher=pattern.matcher(br.readLine()); boolean found=false; while(matcher.find()){ System.out.println("找到子字符串"+matcher.group()+" 开始于索引"+matcher.start()+"结束于索引"+matcher.end()+"\n") found=true; } if(!found){ System.out.println("没有找到子字符串\n"); } } } }

程序员能力矩阵

[译文]程序员能力矩阵 Programmer Competency Matrix 注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识。 计算机科学 Computer Science 2n(Level 0)n2(Level 1)n (Level 2)log(n) (Level 3)Comments 数 据结构不知道数组和 链表的差异 能够解释和使用 数组,链表,字 典等,并且能够 用于实际的编程 任务。 了解基本数据结构时间和空间的折中 ,比如数组vs 链表,能够解释如何 实现哈希表和处理冲突,了解优先队 列及其实现。 高等的数据结构的知识 ,比如B-树、二项堆、 斐波那契堆、AVL树、 红黑树、伸展树、跳跃 表以及前缀树等。 算法不能够找出一 个数组各数的 平均值(这令 人难以置信, 但是我的确在 应聘者中遇 到过) 基本的排序,搜 索和数据的遍历 和检索算法。 树,图,简单的贪婪算法和分而治之 算法,能够适度了解矩阵该层的含义 。 能够辨识和编写动态规 划方案,良好的图算法 知识,良好的数值估算 的知识,能够辨别NP问 题等。 Working with someone who has a good topcoder ranking would be an unbelievable piece of luck! 编程体系不知道何为编 译器、链接器 和解释器。 对编译器、链 接器、解释器有 基本的了解。知 道什么是汇编代 码以及在硬件层 如何工作。有一 些虚拟内存和分 页知识。 了解内核模式vs用户模式,多线程, 同步原语以及它们如何实现,能够阅 读汇编代码。了解网络如何工作,了 解网络协议和socket级别编程。 了解整个程序堆栈、硬 件(CPU+内存+中断+ 微码)、二进制代码、 汇编、静态和动态链接 、编码、解释、 JIT(just-in-time)编译 、内存碎片回收、堆、 栈、存储器编址… 软件工程 Software Engineering 2n(Level 0)n2(Level 1)n (Level 2)log(n) (Level 3)Comments 源 码 版本控制通过日期备份 文件夹 VSS和初级 的CVS/SVN用户 熟练地使用CVS和SVN特性。知道如 何分支和归并,使用程序库补丁安装 特性等 有分布式VCS系统的 知识。尝试 过Bzr/Mercurial/Darcs/Git 自 动化编译只知道在IDE 下编译 知道如何编译在 命令行下编译 系统 能够安装一个脚本构建基本的系统 能够安装一个脚本来构 建系统并且归档,安装 程序,生成发布记录和 给源码控制中的代码分 配标签。 自 动化测试认为所有的测 试都是测试员 的工作。 能够编写自动化 的单元测试,能 够为正在编写的 代码提出良好的 测试用例。 按照TDD (Test Driven Development )方式编写代码。 了解并且能够有效自动 化安装,载入/性能和UI 测试 程序设计 Programming 2n(Level 0)n2(Level 1)n (Level 2)log(n) (Level 3)Comments 问题分解只有直线式的 代码,通过复 制粘贴来复用 能够把问题分散 到多个函数中 能够想出可复用的函数/对象来解决 大题的问题 使用适宜的数据结构和 算法,写出通用的/面向 对象的代码来封装问题 的易改变的层面。 系统分解N想不出比单 一的文件/类 更好的层面 如果不在同一平 台或没采用相同 的技术,能够把 问题空间和设计 方案分解。 能够设计跨技术/平台的系统。 能够在多个产品线和与 外部体系一体化中虚拟 化和设计复制的系统。 同时也能够设计支持系 统监视、报告、故障恢 复等。 This is an often under rated but very critical criteria for judging a

《JavaScript编程》课程标准

《JavaScript编程》课程标准 课程类型理论+实践课 课程性质必修课 学时及学分36,2 适用专业(群) 执笔人 课程组审核 系(中心)审核 二〇一五年4月

《JavaScript编程》课程标准 一、课程定位 《JavaScript编程》课程是高职高专计算机网络、计算机信息安全和计算机类各专业的专业基础课和职业素质必修课。《JavaScript编程》是一门学习制作网站的课程。通过对本课程的学习,学生将能够使用JavaScript制作网页客户端特效,实现页面特效、动画、用户反馈等功能,从而达到美化网页的效果。《JavaScript编程》属于专业必修课程。 先修课程为:HTML与页面开发。 二、课程设计的理念与思路 本课程方案的设计进一步强化实践训练课程的比重,突出学生能力培养,科学处理讲、练关系,按照三个“三分之一”的比例设计课程并组织教学,三分之一的教学内容采取讲授方式组织教学,三分之一的内容以边讲边练的方式组织教学,三分之一的内容以训练方式组织教学。 在通过教学内容的优化组合,突出实用性和先进性,突出“强调动手、加强实践、培养兴趣、积极创新”的理念,实施循序渐进,实施“基础→综合→系统→创新”的教学体系,打破以往只重视基础内容的教学模式。“基础→综合→系统→创新”的教学体系,就是强调基本概念、基础内容,但不局限;在教学过程中引导学生根据基本内容综合基本知识,升华基本规律,结合工程应用,达到举一反三,使大多数同学能够掌握教材基本内容和重点内容;教学内容各模块基本掌握的情况下,教师注重从系统整体分析与设计角度出发,从更高层次让学生进一步掌握基本内容和重点内容,使学习优秀的同学能够利用基本知识,从系统角度分析教学内容各模块,最终实现学习方法创新及基本教学内容在创新实践中的应用。 三、课程目标 本课程的总目标是:“以学生为主体,以学生的学习为中心”,通过课程的实施,帮助学生学会学习。使学生的知识、情感、技能得到全面发展,既为今后的专业课程学习打下良好的知识与技能基础,又培养良好的态度,为其将来从事专业活动和未来的职业生涯打下基础。课程内容以“学其所用,用其所学”突出高职教育特点,确保人才培养目标的实现。 《JavaScript编程》课程是网页设计的提升课程,通过对本课程的学习,学员能够掌握如何使网站的视觉效果更干净、整洁和美观,加强网页的特效。增强学员的实际动手能力和综合分析问题的能力。

MySQL Crash Course 实验指导手册

《MySQL必知必会》实验指导书 广州番禺职业技术学院 信息工程学院 2012.2

实验一MySQL工具的使用和数据库的简单查询 一、实验目的 1、熟悉MySQL命令行实用程序的使用。 2、学会用命令行工具了解数据库和表的相关信息。 3、掌握简单的SQL语句的使用,学会运用SQL语句进行简单的查询。 二、实验理论基础及教材对应关系 1、实验理论基础: (1)MySQL基本命令; (2)SELECT语句; 2、本实验内容主要对应于教材第3章和第4章。 三、实验内容与步骤 1、检查所用的计算机习题,确认是否已经安装了MySQL数据库管理软件。如果系统安装了MySQL Server 5.0 ,可以通过“开始”菜单—>程序->MySQL-> MySQL Server 5.0-> MySQL Command Client 开启MySQL服务。如下图: 2.连接到MySQL:主机名,端口号,合法的用法名等都已经在在安装设置过程中配置好了,在此只要输入口令:root就能登陆了

另外一种途径: 使用net start mysql 启动myql服务(如果没有启动的话。提示:使用net stop mysql 关闭服务) 然后:使用mysql –uroot –proot进入管理界面。假设root帐号的密码是root 3.查看已经存在的数据库:在mysql> 提示符后输入命令Show databases ; 后,可以看到如下的结果: 表明有三个数据库:information_schema,mysql,test等。 4.查看数据库中的表:(1)用“use”命令选择要操作的数据库,如use mysql; 回车后可以看到“Database changed”表示选择该数据库成功。 (2)输入命令“Show tables;”回车后可以看到所显示的mysql数据库中的表

正则表达式

本文分十四个类别对正则表达式的意义进行了解释,这十四各类别是:字符/字符类/预定义字符类/POSIX字符类/https://www.360docs.net/doc/869119706.html,ng.Character类/Unicode块和类别的类/边界匹配器/Greedy数量词/Reluctant数量词/Possessive数量词/Logical运算符/Back引用/引用/特殊构造。 1.1.字符 x 字符 x。例如a表示字符a \\ 反斜线字符。在书写时要写为\\\\。(注意:因为java在第一次解析时把\\\\解析成正则表达式\\,在第二次解析时再解析为\,所以凡是不是1.1列举到的转义字符,包括1.1的\\,而又带有\的都要写两次) \0n 带有八进制值 0的字符 n (0 <= n <= 7) \0nn 带有八进制值 0的字符 nn (0 <= n <= 7) \0mnn 带有八进制值 0的字符 mnn(0 <= m <= 3、0 <= n <= 7) \xhh 带有十六进制值 0x的字符 hh \uhhhh 带有十六进制值 0x的字符 hhhh \t 制表符 ('\u0009') \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') \f 换页符 ('\u000C') \a 报警 (bell) 符 ('\u0007') \e 转义符 ('\u001B') \cx 对应于 x 的控制符 1.2.字符类 [abc] a、b或 c(简单类)。例如[egd]表示包含有字符e、g或d。 [^abc] 任何字符,除了 a、b或 c(否定)。例如[^egd]表示不包含字符e、g或d。 [a-zA-Z] a到 z或 A到 Z,两头的字母包括在内(范围) [a-d[m-p]] a到 d或 m到 p:[a-dm-p](并集) [a-z&&[def]] d、e或 f(交集) [a-z&&[^bc]] a到 z,除了 b和 c:[ad-z](减去) [a-z&&[^m-p]] a到 z,而非 m到 p:[a-lq-z](减去) 1.3.预定义字符类(注意反斜杠要写两次,例如\d写为\\d) . 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] 1.4.POSIX 字符类(仅 US-ASCII)(注意反斜杠要写两次,例如\p{Lower}写为\\p{Lower})

常用正则表达式

1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2. "^\d+$"//非负整数(正整数+ 0) 3. "^[0-9]*[1-9][0-9]*$"//正整数 4. "^((-\d+)|(0+))$"//非正整数(负整数+ 0) 5. "^-[0-9]*[1-9][0-9]*$"//负整数 6. "^-?\d+$"//整数 7. "^\d+(\.\d+)?$"//非负浮点数(正浮点数+ 0) 8. "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"//正浮点数 9. "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"//非正浮点数(负浮点数+ 0) 10. "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"//负浮点数 11. "^(-?\d+)(\.\d+)?$"//浮点数 12. "^[A-Za-z]+$"//由26个英文字母组成的字符串 13. "^[A-Z]+$"//由26个英文字母的大写组成的字符串 14. "^[a-z]+$"//由26个英文字母的小写组成的字符串 15. "^[A-Za-z0-9]+$"//由数字和26个英文字母组成的字符串 16. "^\w+$"//由数字、26个英文字母或者下划线组成的字符串 17. "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"//email地址 18. "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"//url 19. /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 20. /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 21. "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil 22. /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码 23. "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}| 1dd|2[0-4]d|25[0-5])$" //IP地址 24. 25. 匹配中文字符的正则表达式:[\u4e00-\u9fa5] 26. 匹配双字节字符(包括汉字在内):[^\x00-\xff] 27. 匹配空行的正则表达式:\n[\s| ]*\r 28. 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 29. 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 30. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 31. 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 32. 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 33. 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 34. 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 35. 36. 37. 元字符及其在正则表达式上下文中的行为:

js正则表达式使用

js正则表达式使用 一,概述 1,正则表达式,可以说是任何一种编程语言都提供的机制,它主要是提供了对字符串的处理能力。 2,正则表达式在页面处理中的使用场景: 1)表单验证。验证某些域符合某种规则,例如邮件输入框必须输入的是邮件、联系电话输入框输入的必须是数字等等 2)处理DOM模型。例如通过表达式定位DOM中的一个对象或一系列对象,一个例子就是定位id属性中含有某个特殊字符的div对象。 3)纯编程逻辑。直接用于编程的逻辑之中。 3,说明:本部分所举的正则表达式的代码片断,都是经过测试的,但有一点需要注意,对于换行的字符串的定义,我们在表述时使用的是类似如下的形式: var str=“It?s is a beautiful city”; 这种形式直接写在JS代码中是错误的,那如何获取具有换行的字符串呢?简单的办法:在textarea中输入文本并换行,然后将该值赋给JS变量即可。例如: var str=document.forms[0].mytextarea.value; 二,语法与使用 1,定义正则表达式 1)定义正则表达式有两种形式,一种是普通方式,一种是构造函数方式。 2)普通方式:var reg=/表达式/附加参数 表达式:一个字符串,代表了某种规则,其中可以使用某些特殊字符,来代表特殊的规则,后面会详细说明。 附加参数:用来扩展表达式的含义,目前主要有三个参数: g:代表可以进行全局匹配。 i:代表不区分大小写匹配。 m:代表可以进行多行匹配。 上面三个参数,可以任意组合,代表复合含义,当然也可以不加参数。 例子: var reg=/a*b/; var reg=/abc+f/g; 3)构造函数方式:var reg=new RegExp(“表达式”,”附加参数”); 其中“表达式”与“附加参数”的含义与上面那种定义方式中的含义相同。 例子: var reg=new RegExp(“a*b”); var reg=new RegExp(“abc+f”,”g”); 4)普通方式与构造函数方式的区别 普通方式中的表达式必须是一个常量字符串,而构造函数中的表达式可以是常量字符串,也可以是一个js变量,例如根据用户的输入来作为表达式参数等等: var reg=new RegExp(document.forms[0].exprfiled.value,”g”);

php的正则表达式完全手册

php的正则表达式完全手册 前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题。 索引 1._引子 2._正则表达式的历史 3._正则表达式定义 3.1_普通字符 3.2_非打印字符 3.3_特殊字符 3.4_限定符 3.5_定位符 3.6_选择 3.7_后向引用 4._各种操作符的运算优先级 5._全部符号解释 6._部分例子 7._正则表达式匹配规则 7.1_基本模式匹配 7.2_字符簇 7.3_确定重复出现 1. 引子 目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。 正则表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努力才行,入门之后参照一定的参考,使用起来还是比较简单有效的。 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过。可能很多人也是被这样的代码给吓跑的吧。继续阅读本文将让你也可以自由应用这样的代码。 注意:这里的第7部分跟前面的内容看起来似乎有些重复,目的是把前面表格里的部分重新描述了一次,目的是让这些内容更容易理解。 2. 正则表达式的历史 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。 随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。 如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。 3. 正则表达式定义 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

VC正则表达式的使用

VC正则表达式的使用 2010年9月11日星期六邵盛松 正则表达式是一种对字符进行模糊匹配的一个公式。在数据有效性验证,查找,替换文本中都可以使用正则表达式。 本篇文章主要描述的是使用ATL中两个模板类CAtlRegExp和CAtlREMatchContext。 在使用CAtlRegExp类之前需要添加#include 这个头文件。 RegExp是Regular Expression的缩写 以匹配邮件地址字符串为例说明两个类的使用 该示例更改自https://www.360docs.net/doc/869119706.html,/en-us/library/k3zs4axe(VS.80).aspx CString strRegex=L"({[0-9_]+@[a-zA-Z0-9]+[.][a-zA-Z0-9]+[.]?[a-zA-Z0-9]+})"; CString strInput; strInput=L"admin@https://www.360docs.net/doc/869119706.html,"; CAtlRegExp reRule; wchar_t *wt = (wchar_t *)(LPCTSTR)strRegex; REParseError status = reRule.Parse((const ATL::CAtlRegExp::RECHAR *)wt); if (REPARSE_ERROR_OK != status) { return 0; } CAtlREMatchContext mcRule; wt = (wchar_t *)(LPCTSTR)strInput; if (!reRule.Match((const ATL::CAtlRegExp::RECHAR *)wt,&mcRule)) { AfxMessageBox(L"您输入的邮件地址不合法!"); } else { for (UINT nGroupIndex = 0; nGroupIndex < mcRule.m_uNumGroups; ++nGroupIndex) { const CAtlREMatchContext<>::RECHAR* szStart = 0;

python爬虫入门到精通必备的书籍

https://www.360docs.net/doc/869119706.html, python爬虫入门到精通必备的书籍 python是一种常见的网络爬虫语言,学习python爬虫,需要理论与实践相结合,Python生态中的爬虫库多如牛毛,urllib、urllib2、requests、beautifulsoup、scrapy、pyspider都是爬虫相关的库,但是如果没有理论知识,纯粹地学习如何使用这些API如何调用是不会有提升的。所以,在学习这些库的同时,需要去系统的学习爬虫的相关原理。你需要懂的技术包括Python编程语言、HTTP协议、数据库、Linux等知识。这样才能做到真正从入门python爬虫到精通,下面推荐几本经典的书籍。 1、Python语言入门的书籍: 适合没有编程基础的,入门Python的书籍 1、《简明Python教程》 本书采用知识共享协议免费分发,意味着任何人都可以免费获取,这

https://www.360docs.net/doc/869119706.html, 本书走过了11个年头,最新版以Python3为基础同时也会兼顾到Python2的一些东西,内容非常精简。 2、《父与子的编程之旅》 一本正儿八经Python编程入门书,以寓教于乐的形式阐述编程,显得更轻松愉快一些。 3、《笨办法学Python》 这并不是关于亲子关系的编程书,而是一本正儿八经Python编程入门书,只是以这种寓教于乐的形式阐述编程,显得更轻松愉快一些。 4、《深入浅出Python》 Head First 系列的书籍一直饱受赞誉,这本也不例外。Head First Python主要讲述了Python 3的基础语法知识以及如何使用Python

https://www.360docs.net/doc/869119706.html, 快速地进行Web、手机上的开发。 5、《像计算机科学家一样思考python》 内容讲解清楚明白,非常适合python入门用,但对于学习过其他编程语言的读者来说可能会觉得进度比较慢,但作者的思路和想法确实给人很多启发,对于菜鸟来说收益匪浅,书中很多例子还是有一定难度的,完全吃透也不容易。 6、《Python编程:入门到实践》 厚厚的一本书,本书的内容基础而且全面,适合纯小白看。Python学习进阶书籍 1、《Python学习手册》 本书解释详细,例子丰富;关于Python语言本身的讲解全面详尽而

js 验证各种格式类型的正则表达式

JavaScript code: 含该查找结果的一个数组。?compile,把正则表达式编译为内部格式,从而执行得更快。 正则表达式对象的属性 ?source,返回正则表达式模式的文本的复本。只读。 ?l astIndex,返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。?$1...$9,返回九个在模式匹配期间找到的、最近保存的部分。只读。 ?input ($_),返回执行规范表述查找的字符串。只读。 ?lastMatch ($&),返回任何正则表达式搜索过程中的最后匹配的字符。只读。 ?lastParen ($+),如果有的话,返回任何正则表达式查找过程中最后括的子匹配。只读。?leftContext ($`),返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字

相关文档
最新文档